This is a blog post in response to a quora question. I started a response and it grew well beyond what I thought it would. I guess that means I have an opinion here? 😉
Question: “Which backend programming language should I learn in 2016?”
The answer depends on your objectives. If you are looking for something to base your career on, you should go for one of the more popular, multi-purpose, OO languages:
- Java – This would be my top choice for this realm. It has the largest community and the most job opportunities. And, if you want to work in cutting-edge OSS, it is the most common language (or at least the JVM) of choice.
- C# – This, like java, is a great choice for employability and stability. If you are most comfortable in windows (as opposed to linux or OS X) you may want to start here. The jobs you will find on the market will be more leaning toward the enterprise than commercial. But that is still a very interesting world and one that will likely be around and in great demand for the foreseeable future. And the recent foray into open-source and cross-platform viability could open it to a new world of applications.
If you are looking to add to a toolbelt that already has a foundation in something like the above and will still add value to your career, I would say to add a growing or established language that adds a particular value.
- go – This is, in my humble opinion, one of the key languages of the next 10 years. Partially because google is behind it and what google does, so do any companies that want to attempt to recreate their success. But, it is genuinely a great language. In my opinion, it is like C re-imagined. It is crazy-fast and cross-platform compilable. It has its warts like any language and is still developing a bit. But what is there is very good and well thought-out. And, you are able to go to your next meetup and say “Yeah, I know go.” 😉
Now, if you just want something cool that will teach you something new you have a lot of options. I am a huge proponent of learning a new language just to see a problem from a whole different angle. While there are many options in this world, I will mention a few I have played with.
- Elixir – A ruby-ish language that is built on-top of the erlang vm (BEAM). Elixir hides much of what makes erlang difficult for people to tackle while still leveraging the immense goodness of the BEAM. I’m an erlang guy and would love to propose that everyone learn erlang. But, I’m also a pragmatist. It will be much easier for someone to tackle elixir. Have fun doing so. And still be able to built ridiculously parallel systems easily.
- Haskell – Basically, you can choose any functional language here you like. I feel that Haskell is probably the best combination of pure functional ideologies (no side-effect methods, immutability, etc.) and a pragmatic, practical, implementation. Plus, I feel that every professional engineer should experience fp at some point in their career. Being a 15 year development veteran, I always thought I understood parallel and concurrent programming (simplistically think multi-threading). But then I began to learn erlang and a whole new world was presented to me of how systems “should” be built. And, if all the descriptions of fp describing it in terms of maths discourage you, I would suggest this post about just that.
- Rust – Coming out of mozilla, rust is similar in many ways to go. It has an excellent memory management model/implementation. I could see rust being to go what c# is to java. Either way, could be worth a look.
- Julia – Kind of going out on a limb with this one. Especially since I have done little more than ‘Hello World’ in julia. But there are many things to like about this language and its fresh take on many different approaches that have become de rigueur in software engineering these days. (Plus it has a repl!) If nothing else, it could be worth exploring just to force your head out of the standard box.
I hope this helps. I realize I have left out many languages that may be just as worthy. But I had to limit it somehow and I did so by only listing those I have, at least, a modicum of experience with.
5 thoughts on “Languages to learn in 2016”
If I had to learn one language you didn’t mention it would be Swift. I am definitely interested in Rust and Elixir. I did the MOOC on Haskell, and that was enough Haskell for me =) Good thought-provoking post! Maybe will inspire to get off my ass and make something.
Good point. I was specifically thinking of server-side languages as that was the OP question. Although, I suppose you could do that in swift as well. http://perfect.org/
Then Java is the way to go.
I learned Java, C, MySQL and a bit of (PHP, HTML, CSS) [which I hate!/I ain’t like Web Design] I hope to find work in creating applications, systems , software [I wanna work on the core and backend], what do ya recommend for me please because I have only the upcoming summer to learn something outside the college [before I graduate]
Thanks very much.
Given that you already know java and want to work on the backend I would actually recommend go. Go is gaining a lot of traction and for good reason. It is a very powerful c-like language that works well in the distributed world of today’s server-side application architectures. If you’re ok with being a bit more niche, Elixir is also a great choice. It just doesn’t have the same level of industry adoption that go is seeing.
You can’t really go wrong with either as the real value that they both provided is native support for truly distributed, decoupled architectures. This forces you to think of systems in a different way than you are likely familiar with. So, even if you never end-up using either for a job your mental toolset will be better suited to a future in 21st century software engineering.
I wish you the very best of luck!