The most promising languages of 2016
It is time to update one othe most popular article in this blog. It is time to talk about the most promising languages of 2016! But first, let me repeat the small notice I did the last year. The languages I am listing below are not the most used languages, or the languages that you have to learn in order to find a great job as a developer. There are many more established languages that fill this role. Languages such as C++, Java, C#, Python and JavaScript are way more solid and safe if you are looking for a job or to start a developer career.
Instead, I am trying to list emerging languages that may become more important at the end of 2016. This list is for you if: 1) you are passionate about programming languages 2) you want to learn something new because you are bored with your current language 3) you want to bet on a language hoping that it will become mainstream (and thus, you will be one of the early experts in that language, and this implies nice job opportunity). Or you can read this list because you are simply interested on where the language research and development is going in the real world (academic research is a totally different story).
Rust
I admit it. I am a bit enthusiastic about Rust. Even with all its drawbacks, I think Rust is in a good spot for being the first serious contender to the C++ hegemony for many years. Why? Because it is extremely low-level, fast, is a good balance between the functional and imperative paradigm, has a promising ecosystem (dependencies and packet manager, build tools and so on) and guarantees advanced memory safety at compile time. If you pass the stumbling block of its pedantic compiler, you will love it.
Anyway. I put Rust in this list the last year also, when it was still in beta. How things are going? Extremely well. Rust 1.0 was released on May 15h and since then it is arrived to version 1.5. A lot of improvements have been made. The most evident are: Rust support for the Microsoft Visual C toolchain in Windows (since v1.2), performance improvements (through 1.2, 1.3 and 1.4) and the introduction of cargo install
and many other cargo sub-tools (in the new v1.5).
Moreover, the backward compatibility enforcement is working fine, even through the small breaking changes that happened in between versions. The compiler warns you and explain to you how to replace a breaking change with the new idiomatic solution. Every transition from version to version has been painless so far.
But the real reason why I still bet on Rust is its community: it is strong, fresh and vibrant, and it works well in tandem with the developers. The language feels alive, full of hope and enthusiasm is contagious. And the 2016 will be exciting. In my opinion, it is a good time to invest time into Rust.
Nim
I put Nim in the list last year too and it was a long shot. Maybe still is… But less. Maybe it is just a feeling, but Nim community was a bit quieter than last year. However, it was extremely productive. Two major versions were released this year, bringing Nim from v0. 10 to v0.12. My sensation is that Nim is now about two other 0. X versions away from its 1.0, official stable version.
The changelogs are, as usual, impressive. A notable addition is the introduction of NimScript, a subset of Nim which can be used as a scripting language and will be interpreted at runtime by the Nim’s builtin Virtual Machine.
Plus, there is another good omen for Nim. Did you know that Unicredit, the biggest Italian bank, is actually exploring some open source projects in Nim? It is just a small library, but if a huge bank group is interested in Nim, why don’t you?
Swift
Swift is not a “new” language. In fact, it was enthusiastically announced in 2014 and since then, many developers already started building some nice application. What is new is that now Swift is Open Source. The hope is that this will bring Swift outside the closed boundaries of the Apple ecosystem. In fact, this is a shame because Swift is not a bad language, at all. It is fast, it is functionally-inspired (because this is the trend of this decade) and expressive.
If Swift open-sourcing will bring the language to Windows (now it actually works on OSX and Linux) we could really start to think “why not”? Well, there is another problem: actually most of the libraries for Swift are OSX or iOS centric. Expand the library set to multiplatform libraries will require more effort. I do not think this process will be completed by 2016. However, Swift is an interesting choice if you want to help in the process and bet on a language that is more established. Swift is not a complete “promise” but actual production-ready (? I have no direct experience with Swift. Take this with caution).
TypeScript
TypeScript is just a statically-typed super-set of JavaScript. It is developed by Microsoft itself and it is Open Source. TS is the perfect way to mix the power of compile-time errors of statically-typed languages with the omnipresence of JavaScript in the modern web (and not only). Last year there was a good increase in people using TypeScript and, more in general, TypeScript support and communities. Microsoft is doing a really great job here.
However, the reason why I think TypeScript will have a great year is that we will finally see the convergence between the final specification of the next generation of JavaScript and TypeScript features. This will make any transition form JS to TypeScript almost effortless as intended. Well… Unless Flow will become so powerful and easy to make TypeScript obsolete.
Elixir
Elixir is the long shot of the year! I cannot complete this article without an almost-obscure new language with a good momentum. And Elixir is a really new language, but it had a nice expansion during the last year. The perfect candidate.
Elixir is a “modern, dynamic implementation of Erlang”, it keeps many of its dad’s strengths and solves many of its weirdness. The language is focused on scalability and multi-threading. In fact, the Elixir distinguishing feature is its processes. As explained on the website, all Elixir code runs inside lightweight threads of execution (called processes) that are isolated and exchange information via messages.
The language is stable enough to be used, but it still has a small community. I am not sure if it already has enough user to not let it die in a few years. However, it can use libraries developed for Earlang because it runs on the Earlang Virtual Machine. This is a real advantage for Elixir.
What happened to Go and Julia?
Last year I put Go and Julia in this list. What’s happened to them?
For what concerns Go, I think it is now way out of the promising stage. Even if is still a recent language with a lot of challenges on its way, it is now a good, acknowledged language. Golang is a successful language, there is a sensible increase in jobs for Go-s developers and it is used in many interesting companies and open source projects. Go is no more a “young promising language”, it is a graduated language.
Julia instead is slowing down and it disappeared from my radar during the last 9 months. It is still young and promising but it slowed down a bit this year, so I don’t think it deserve the Top 5 for now. I hope to see Julia in this article again in the next year, thus.
Quick and dirty opinion on other young and not-so-young not-so-promising languages I missed
Here it is a dirty list on some other small/medium languages. If you care about my opinion.
Clojure: I feel it is not advancing fast as he should. Slow startup time make it not so good for small scripts, dynamic nature makes it not so good for big software. Still, one of the best Lisp implementation nowadays along with Racket.
D: It is not young but it “rebooted” recently. However, it does not really fit in anyplace. It is not a system language because of GC, it is not a high-level language because of the “C++ heritage”.
CoffeScript: Community is running away from it. It grew fast and fell even faster. Probably, it is not worth anymore.