What Programing Language to Learn Next?
According to Wikipedia, there are over 700 programming languages in the World. How do you decide which one to learn next? Let’s explore several ideas.
Why do you want to learn a new programming language?
Technology industry is very dynamic. Pace of innovation and change is extremely fast. We, as engineers, have to move and evolve just as fast as the industry. You can either be at the forefront of it, or fade into oblivion. If we take lawyers for example, they interpret laws that have existed for tens or sometimes hundreds of years. In tech, we don’t have that luxury. Who remembers technology that was used 10 or 20 years ago? Does anyone start new projects using PHP3 or ActionScipt? C++98?
If you want to be a successful engineer, you have no choice but to constantly sharpen your saw, develop your skills and learn new ones.
But successful learning requires that you start with a goal in mind. What is the end result that you want to achieve? The easiest and most effective way to do that, is to start with a question “Why?”. Why do you want to learn a new programming language? Your own answer to this question will define your choice of your next programing language. Lets' look at some possible answers.
You want to perform better at your current job
Often the best learning you can do is to learn something that brings you benefit right away. A good way to do that is to learn something that you can use at your current job. For example, if you are a Java programmer, it would make very little sense to learn C#. But instead, you can learn something related to Java. For example, new ideas and features in upcoming release, some popular library or framework. You can go further and learn something different from “Java World”, for example Kotlin or Clojure.
Another effective way is to look for problems and find ways to solve them. If you frequently experience problems with some particular library or framework it would make a lot of sense to dedicate time to learn it. You will learn something new that you could use in future, and also something to help you eliminate problems that you face and become more effective at your work.
You want to maximize your options for next job
If you are thinking about moving to greener pastures and look for a new job, look at open positions in your domain. What are technology other companies they are using? Try to make a list of several companies that you could consider working for and see what technology is in their stack. Identify gaps in your knowledge and eliminate them.
You want to stay up to date with the latest tech
It is always beneficial to be an early adopter of a new technology, but how do you decide which one? New languages are created all the time. Every day new JavaScript library sees the World. It will be impossible and highly impractical to try to keep up with all of them. Besides, most of them will fall into obscurity and never gain mainstream momentum. Trends come and go - what looks promising today might silently die tomorrow. So dedicating too much time to new trendy things is wasteful. But it is always a good idea to monitor what’s going on and learn ideas behind new technologies.
In the myriad of languages and technologies that you can learn, it is hard to filter out those that are worth your time. You can seek other opinions, like those of your colleagues. What I find helpful is TechnologyRadar published yearly by ThoughtWorks. It is a compilation of languages and technologies that are “under their radar”. ThoughtWorks estimate the potential and give their rating, whether they think the technology must be adopted right away or requires further consideration.
You want to become better engineer
Syntax is just a tip of the programming language iceberg. The most important things lie beneath it - the ideas that a particular language is built around. Knowing those ideas will enable you to have more tools at your disposal. You can always use good ideas in your projects.
Different languages can offer you tons of ideas to enrich your tool set. Functional languages (Clojure, Haskel, F#) can teach you about the benefits of pure functions, absence of state or why you don’t need classes. Duck typing languages (Python, JavaScript, Ruby) can teach you about benefits of flexible type systems. Erlang can teach you about ideas that make concurrent and fault tolerant systems easy to build. Prolog can teach you about logic programming. Learning C++ can teach you about memory allocation. Declarative languages can teach you about high-level programming. And so on, to infinity. All those things you learn and take back to your projects, no matter what language you are using. This is a knowledge that gives you options and ability to choose the best ways to build your systems.
If you want to widen your perspective, you can learn a language that is built around a set of principles and ideas that are different from languages that you already know. If you have been always using compiled language - try to learn interpreted language. If you have always been doing OOP - try to learn a functional language. If you have always been doing front end programming - try to learn back end.
Takeaway
Having a right answer to “Why?” question will always help you make informed and thoughtful decisions. You will spend you most precious possession (your time) to learn new skill or tool, so you need to make sure that you get the most out of it.
No matter what language you choose to learn, make sure that you learn something new and useful. You need to learn a new skill, an idea or approach that helps you build better systems.