It is surprising the number of times I’ve been asked this question. Either someone is starting to study computer science in the university and they are looking for advice or just thinking about expanding their programming toolbox, the question is always there, and it is not a trivial one.
If you go to search in Google -or any other search engine of your choice- about “programming languages to learn”, the number of rankings and lists is huge: some rank by number of commits to GitHub, some rank based on job positions open, or even based only on a poll to see which one is most loved (whatever that means). But let me tell you something, in this our industry, languages and technologies come and go too easy, so relying on what grows faster or what has the most job opportunities today is not always the best strategy.
IMPORTANT: All my statements here are personal opinions, please remember that.
Where to start for your first language?
If you don’t know any language or you are starting in the university, my advice would be to go with something like C# or Java.
My reasons to choose those two are:
- Imperative and object oriented (OOP), so you can use this knowledge to learn other languages in the future (like C++, Rust…)
- Big community in the internet, so if you find any problem you can ask
- Solid history and foreseeable future, so it’s unlikely you will need to change half way through
- Big library stack, so whatever your project is, it can be done using them
- Multi-platform, so you can develop for a lot of different systems
Where to go if you already have a first language?
Now this one is different, here I will be assuming you already know a language (it could be C#, Python, Java, C++, Kotlin…) and you are looking for something to expand your toolbox.
In my opinion, it would be perfect for every software engineer to have solid knowledge of, at least one compiled (or hybrid) and one interpreted language for scripting. Based on that, it depends on what you know.
If you are a compiled language dev
If you are a confident developer in Java, C#, C++, Rust… Then it’s probably good for you to learn a scripting language. There are many that could be useful depending on your environment/context but in my opinion you should go for Python.
My reasons to choose Python over others are:
- Object oriented, not all of them are
- Widely used, but really important in some areas like machine learning or web backend
- Not only focused in web
If you are a scripting language dev
What if you want something newer?
If you want to gamble it a bit not caring much about how solid the tech is in the market right now, and your thing is more trying to be an early dev on a cool language, you could go with Rust or Go. Both are compiled languages but they look really interesting.
As a final note, I’ve been a developer using mainly C#, but also perl, bash and MATLAB for the last 10 years. And developing in personal or academic environments using Java, C++, Python and Rust. And if you are curious, I started learning Pascal when I was a kid, just for fun.
My general advice for you is that you choose a language for how many new things you are going to learn, more than how many new jobs you think you may be able to apply to. Knowing a language is more than knowing the syntax, it’s about knowing patterns and best practices and that comes with experience.
When I am interviewing candidates for a new software engineer position, I’m looking for good developers with an engineer mindset, not for who knows a given language better.