Another year, another 5 promising programming languages you should keep an eye on in 2017. As usual, I’d like to write the warning I put here every year: in this list, you will not find programming languages for hiring purposes, but for very long-time investments and for pure programming fetish.
So, now that you know what I am talking about, here we go with the top 5 for 2017.
Top 5 Promising Programming Languages for 2017
Here we go, again. You know, I will put Rust again and again in this list. And not only because the language is fascinating and interesting, but for all the other aspects too. Sure, Rust it is one of the few super-low-level languages that can actually compete with C. But it is also one of the friendliest programming community I ever joined (emh, lurked).
I don’t think I have to spend too many words on Rust. Rust is a quite new memory-safe non-garbage-collected low-level language. In the last year, Rust reached version 1.14 and progresses with a steady pace with a release every 6 weeks. Even if you do not have any plan for Rust in 2017, keep an eye on it. Following its evolution is quite fun (depending on your idea of “fun”, obviously).
Nim is another very interesting language. It is a bit less established than Rust, but its syntax is easy to grasp, it is really efficient in many general-purpose and common use cases.
Now, before we go on, I had to say a thing. Usually, whenever I say that “unlike Rust, Nim is garbage collected” somebody pops up from the tall grass remembering me that “in Nim you can disable garbage collection”. Well, let's be clear. In any GC language you can disable garbage collection. The difference is if the language works in the same way. In Nim, you can disable the garbage collection but, at the time, standard library assumes GC is running and, therefore, didn’t work. Moreover, if want to use manual memory management in Nim, you face all the problem of C because there is no compile-time safety check (unlike Rust). If you do not trust me, trust the description of Nim project on GitHub:
“Nim is a compiled, garbage-collected systems programming language […]”
Said that, for many, many applications garbage collection is not a problem, so I do not understand why some Nim guys are so harsh on this point. Nim is an amazing language even if garbage collected. It is like Python but compiled to multi-core binary code. And it has an amazing system for generating expressions at compile time.
It is still a bit in the shadow, but if its time will come (and I hope so), it will be great.
Elixir is another language that it is having a lot of traction. It can appear like a bunch of syntax sugar macros over Erlang (and probably, it born that way), but it is more. I already talked about Elixir last year. But it is only during 2016 that I started digging into Elixir for real. The big pros of Elixir are its Erlang back-end and its Ruby syntax. The first one allows Elixir to be used for highly-concurrent software, in fact Erlang is born for that. Writing concurrent code in Elixir it is easy just like using list comprehension in Python. However, Erlang syntax can appear strange and unfamiliar for many developers, for this reason, the Ruby-like syntax can definitely help with Elixir.
However, it is a dynamically typed language (even if it supports some level of gradual-typing), so keep this in mind. In any case, depending on how Elixir will evolve in the next couple of year (and in particular its ecosystem), we can have another strong contender and alternative to Node.js.
Talking about Ruby-like languages, another very interesting language I have to point this year is Crystal. In very few words, Crystal is Ruby but compiled to machine code. As stated by the developers, Ruby syntax compatibility is not a top priority, but the goal is to be as close as possible to Ruby expressiveness and to be as close as possible to the C speed. In some sense, is very similar to Nim but with a more “Rubiest” syntax.
Another strong point for Crystal is the ability to call very easily C code and, that it is statically-typed (but type inference allows you to avoid explicit types declaration in many situations).
There is a bit of hype around Crystal even if the language is still in a very alpha state and the syntax itself it is not stable. Crystal it is still at version 0.20.3, but releases are fast and interesting to track. If you share the desire expressed in Crystal goals, you should track this project.
This is a long shot, not because we are talking about an obscure alpha language, but because Kotlin seems to be that language nobody really needed. In the last ten years, we have seen many JVM languages with the goal of becoming “a better alternative to Java”. But, in the end, everybody still uses Java.
So, why Kotlin? There is no killer feature her. The only thing can push Kotlin as a solid replacement to Java is the company that it is developing it:
JetBrains. Everybody knows JetBrains and most of us love their IDEs. This can be enough to slowly push Kotlin in the wild, especially for Android development (Android Studio is based on JetBrains IDE, after all). It this enough? Probably, not. Will see.
I’m not convinced of this language, but I think we will definitely see if it can be something serious during this year. That’s why I put it here.
Now a quick comment on some other languages I didn’t put in the top 5.
Clojure: I am definitely waiting for 1.9. Unfortunately, it is passed one year since release 1.8 and 1.9 will not be available by the end of the year. This is not a problem, but 1.9 promises a lot and I want to see it on the field before pushing Clojure back to top 5. Anyway, a solid sixth place.
TypeScript: I think we can agree that TypeScript is no more a promising language. With version 2.0 it is a solid and established product that kept its promises. Just like Go, it is time for TypeScript to go outside this nest.
Eve: This is the strangest and boldest thing I’ve found this year. It is an IDE, it is a language, it is both. Eve is definitely a strange and innovative creature that feeds on developers hype. In my opinion, Eve is too far ahead for these times. It will not be very successful but it will be an inspiration for future languages (in the best scenario it will be like Haskell).
Red: Red is another strange language, a modern evolution of another arcane specialized language named REBOL. I find this language interesting because it allows a very natural reactive programming. Because reactive paradigms could be the “next big thing” for the new functional programming era, it is interesting to look at a real language working with it. However, note that the language is totally in some pre-alpha unstable plane.