Choosing a Programming Language
As a software developer you will need to learn one or more programming languages. Today, there are probably more programming languages available out there than you can learn well enough to be effective in. With all these language choices - how do you choose which programming languages to learn? In this text I lay out the criteria I use myself to guide my own choices. Perhaps these criteria could be useful for you too.
Programming Language Selection Criteria
Here is a list of my primary programming language selection criteria:
- Needed for my job?
- Needed in other jobs I would like?
- Is the language popular?
- Is the language designed for control or convenience?
- Does that language have some interesting features or innovations?
- Are there good learning materials available?
I will elaborate more on each of these criteria in the following sections.
Needed for My Job?
The most important factor or criteria for me when choosing whether to learn a programming language or not is, whether I need that programming language for my current job. Or, even if I don't need it, would the programming language still be beneficial for me to know in my current job. If it would, that would be a big motivation for me to learn that programming language.
Needed in Other Jobs I Would Like?
The second criteria I apply is whether the given programming language is needed, or beneficial, in another job I would find interesting. If it is, that would be another motivation for me to learn that programming language.
The way I normally find out what programming languages are needed for certain jobs are by looking at job ads for that kind of job, and see what type of programming languages are listed.
Is the Programming Language Popular?
The third criteria I look at is whether the programming language is popular or not. I usually look at the PYPL and TIOBE indexes when trying to determine the popularity of a programming language. I have listed links to both indexes here:
Is the Language Designed for Control or Convenience?
The fourth criteria I look at, is whether the language is designed for control or convenience. I prefer languages designed for control first, convenience second.
By designed for control I mean designed to give the developer as much control over what ends up taking place in the code at runtime. For instance, maximum control over programming paradigms, how certain operations are carried out by the hardware, memory management, access to hardware etc. I consider languages such as Assembly, WebAssembly, LLVM, C, C++, D and Rust to be languages designed for control and performance first, convenience second.
Does the Language Have Some Interesting Features or Innovations?
The fifth criteria I use to determine if I want to learn a given programming language is whether the language has some interesting features or innovations. If it does, I will be more motivated to learn that programming language.
Are There Good Learning Materials Available
The sixth criteria I use is whether or not I can find any good learning materials about the given programming language. If I cannot, I will often postpone learning that language until I find better learning materials.