I spend a lot of time on Twitter, and I regularly listen to a half dozen tech podcasts. Because of this, I hear about a lot of programming languages.
The amount of languages to choose from is overwhelming. On the server, open source favorites like Ruby and Python are still frequently used, but increasingly the attention is awarded to relative newcomers in the space like Go, Elixir, F#, Kotlin and Rust. Functional languages that compile down to JavaScript like Elm, Facebook's ReasonML, and ClojureScript are also increasingly talked about.
In the mobile and application space, newer cross-platform solutions that utilize JavaScript and Dart compete with established native platform-specific solutions like C#, Java and Swift.
With so many languages to choose from, it can feel paralyzing. How do you know you're making a good choice when there are so many options? You can narrow your focus substantially by looking at some practical considerations.
Understand Why You Want to Learn a New Language
Understanding why you want to learn a new language may be the most important step. If you want to learn LISP just because you think LISP is interesting, then skip the rest of this article and start learning LISP.
For many of us, the reason for learning a new language will likely be for a personal project, for employment opportunities, or to solve a specific problem.
If you want to learn a new language for personal projects, focus on free and open source languages and tools. The licenses for products like .NET's Visual Studio IDE can be complicated and are subject to change. This could be a hindrance at any point in building your personal project, and might stop the project completely in its tracks.
You won't always be able to use open source all the time (example: Unity game development), but when all other things are equal, open source is worth consideration.
If you're learning a language to become more employable, then you should find what languages are popular where you live. Go to Indeed and Dice and type in your city and the kind of development you're interested in. Find the languages that come up most frequently. If 4 out of 5 companies are looking for C# developers, then you should probably focus on learning C#.
Not every city will have developer jobs. If you're open to moving, find the languages that are popular in cities you're interested in living in. If you're looking to work remote, keep reading for more considerations.
If you want to learn a new language to solve a specific problem, find the popular languages for the problem you're trying to solve. Many areas of programming have one-or-two obvious choices. When that's the case, pick one of the obvious choices.
- Are you trying to do professional game development? C++ or C# are your main choices.
- Interested in machine learning? Python is probably your best bet.
- Want to build web applications? Learn JavaScript.
- Want to do hobby robotics with Arduinos? Learn C++.
When there are many solutions in your problem area, other important considerations may be licensing (addressed above) and popularity.
Look at Language Popularity
Assessing popularity can be extremely valuable when deciding what language to learn. It might not be talked about enough.
A popular language will typically have a bigger community for help, more resources to learn from, and more libraries to use in your projects. This lets you spend less time reinventing the wheel and more time writing the unique parts of your applications.
The TIOBE Index is considered an authority on language popularity. Spend some time reviewing it.
In general, prioritize learning languages in the TIOBE Index's Top 20. These languages have more jobs, a bigger community, and are less likely to be abandoned by their authors overnight. However, the following are exceptions to this recommendation:
- None of the top 20 languages address the problem you are trying to solve.
- Your region's employment opportunities are primarily in languages that aren't in the top 20.
- The language is in decline.
Consider the Language Trend
While languages rarely die outright, after enough time, many languages will get neglected. This can be particularly true when a language's development is spearheaded by a large corporation like Microsoft or Apple.
At the time that this blog post was published, two versions of Visual Basic occupy the TIOBE Index Top 20, yet Microsoft recently announced that it will no longer be adding new features to the language. Apple has been neglecting Objective C to focus on its newer language, Swift.
And even though Perl is free, open source, and still in the TIOBE's top 20, its usage has been on the decline for years.
In 2020, I would avoid Visual Basic, Objective C and Perl.
Favor learning languages that aren't consistently trending towards decline unless they solve a specific problem of yours, or that language is where your region's opportunities reside.
Final Thoughts
While there are countless programming languages to choose from, many of us are writing code to address problems that can be solved in nearly any language. Newer languages in particular are created to address problems that these older languages don't solve particularly well. Those problems might not be your problems.
When picking a new language to learn, focus on problems that are more tangible, like what you're trying to build, employment opportunities available, and the popularity/trend of the language to ensure you get the most value out of your learning investment.
Top comments (2)
The counter-point to your final argument, as always, is legacy code! VB may well be dying from an active development standpoint, but many, many companies out there will be using it for the foreseeable future. Perl has also proven to be very death-resistant :) The language is still being updated and the CPAN package database is massive, so it's well supported. I've had to deal with multiple perl codebases in my relatively short career.
I wouldn't start a brand new perl project these days, but there's plenty of spaghetti code out there that needs wrangled and good money in doing it.
Hey Travis, thank you for taking the time to read this!
I couldn't agree with you more about legacy. It's very worthy of consideration depending on the opportunities available in your region. In my current city, VB.NET is still thriving. I'm moving to Sacramento soon, however, and over there it's mostly C#, JavaScript, and Java. If the opportunities are there though, there is real money to be made in legacy software.