26. How do I choose a Programming Language for a project?#

Today we’ll explore how programming languages are cateogrized. Along the way, this will expose what core, generic features of a programming language are.

The key takeaway that I want for your is to have intution for how to choose a language for a project, not only your favorite, but what is the best for different types of projects.

If you are completing the Experience Report to make up for missing class, I reocmmend starting it at the start of making up the activity.

Important

Use the makeup workflow with an ISO formated date (YYYY-MM-DD)).

26.1. Comparing languages you know#

Tak a few minutes on your own to fill in the follwing table for two languages of your own. Replace the <langugage> with two languages that you are familiar with. Add two additional rows. You can do this by memory, or by looking up/discussing. If you look things up, be sure to use reputable sources and include links to them.

| feature | <language> | <language></language> |
| ------ | ------ | ------ |
| use of whitespace     | Text     | Text     |
| list/array types |   | |
| variable typing |  | | 
| memory usage | | | 

Post your table on GitHub in the language comparisons discussion. Reply to at least two peers offering either advice or asking additional questions.

26.2. Learn more#

Read these slides: intro to PL

26.3. PL in Developer Survey#

Read Carefully the developer survey// languages section for 2023.

Include answers to the following questions in your experience report for today.

  • what is surprising?

  • what did you expect?

  • what do the popular languages have in common?

  • what do the dreaded languages have in common?

  • How are popular vs dreaded languages different? What features might be the cause for making a language dreaded?

  • How to used languages differ from less commonly used languages? What features might be the cause for making a languge popular?

  • How have things changed over the years of the survey?

26.4. Prepare for Next Class#

Bring 3 misconceptions about course topics to class.

This could be:

  • things you thought before the semester and know better now

  • things you thought at some point during the semester and had you stuck on a badge

  • things you have heard someone else say that you now know is not true

  • something you think is tricky and would confuse someone else

put them in your KWL repo on a branch linked to this issue in a file misconceptions.md

26.5. Review today’s class#

  1. Choose two languges with different standings in the desired admired list. THis could be a highly admired and least desired; it could be one with a small gap and one with a large gap. Read a few posts about each language and try to figure out why it is/not admired or desired. Summarize your findings. Include links to all of the posts you read in a section titled ## Sources in your markdown file. For each source, make a bulleted list with some notes about the author’s background and any limitations that might put on the scope of their opinions. (for example, a data scientists’s opinion on languages is very valuable for data science, but less for app development) Add this to your kwl repo in language_love_dread.md.

26.6. More Practice#

  1. Describe a type of project where it would be worth it for you to learn a language you have never used before in newlanguage.md This should be based in what types of features for the language your project would require and/or what would contribute to the long term health of the project.

  2. Learn about one of the following languages that you have not used before: R, Julia, Clojure, Zig, Go, erlang, Elixir or another language you are curious about that appeared in the Developer survey. For example you might be interest in the top paying languages. Use the official documentation. Answer the following questions in languagelearning.md:

    1. What is this language designed for?
    2. What Programming paradigm(s) does it support?
    3. Give at least 1 example of a programming language that experience in would make it easy to learn this language and explain why. 
    4. Give at least 1 example of a programming language that experience in would make it hard to learn this language and explain why. 
    5. What is its most unique feature(s)?
    

26.7. Explore badge option#

Actually try out one of the langauges above in a new repo created from this asssignment.

  1. Setup the devcontainer to provide the compiler/interpreter for the language of your choice. See features

  2. Add top extensions related to the language to the devcontainer.

  3. Add gitignore file for that language

  4. Write a hello world type program in the language and make sure it runs.

  5. Use the official documentation to figure out a common task in the language. You may use GitHub Co-pilot to write the code.

  6. Answer the questions in the README of the template repo.

26.8. Experience Report Evidence#

If in class you should have the alternate file we made. If for makeup, your report should have all of the content above.

26.9. Questions After Today’s Class#

26.9.1. Is it possible to only work with one language and never even consider using other languages?#

Maybe if you work at one company forever, but not easy.

26.9.2. Are deep learning libraries that are changed from python to another language open source?#

It’s not so much that they’re changed from Python to other langauges as far as I know. For example tensorflow has a C++ API and the optimized parts of it are written in C++. It is a Python library, but more than half of the content in the repo is C++. It is open source though.

26.9.3. What typically makes languages go obsolete?#

Some stay necessary in a small sense forever (as far as we have experienced so far) because something critical is written in it. For example COBOL has been basically considered irrelevant by computer scientists the whole time, but it is still what 95% of ATM swipes rely on.

More often I would say a language might never become popular and then becoe obsolete or a version of a language can become obsolete.

More research on this is a good explore badge.

26.9.4. Is it worthwhile to learn how Docker works in order to be more employable?#

Docker is worth learning.

26.9.5. How often should I be weighing my options for the programming language I’m going to use for a project?#

If you are starting a project from scratch it is worth thinking about it.

26.9.6. What class would give you a license to MATLAB so you can get experience for professional use?#

Here is URI’s MATLAB access information. You do not need to be in a specific class.