As famously stated by Ludwig Wittgenstein: « The limits of my language means the limits of my world ». He was referring to natural languages, but this quote can be also applied to the programming world.
Learning a new programming language is an intellectual journey which may help deepen your understandings of computer science. This opens the mind so that you have a different perspective on the software practice. It also exposes you to different programming paradigms. You witness how some ancient or unpopular ideas either transform into popular ones, or got forgotten to be then rediscovered again a decade afterwards.
With the year 2020 around the corner, it is a good idea to also review your programming goals. In this short article I will give you four ideas plus a bonus for programming languages to learn in 2020 in order to hopefully boost your career as a software developer.
“But why should I listen to you?” you may rightly ask. In the end, there is no shortage of people who have an opinion about this topic. I’m not an expert in those language, but I’ve been lucky to get exposed to different programming ideas in the span of 15 years as an organizer of technical conferences with PolyConf being my largest and my dearest creation.
PolyConf promotes the idea of polyglot programming. It’s about encouraging a generalist approach to the art and craft of software development. Programmers should strive to have a comprehensive understanding of programming concepts with breadth and depth of knowledge that transcend the boundaries of a single language.
During those years I’ve had a chance to meet and exchange with creators of programming languages, frameworks and software tools. I was able to witness not only new technologies emerging (like Ruby on Rails in 2005 or Node.js in 2009), but also great ideas being discarded and sometimes forgotten. This experience gave me a good insight into the field of programming.
There is no particular order for this list. Also, it is not about learning all those languages. These are just ideas to inspire or ignite your curiosity so that you can find your own path in this field.
Reason
Reason is a new syntax (and a toolchain) built on top of OCaml . It provides functional and object-oriented features with type-safety and focus on performance. Its syntax is similar to JavaScript. The intention is to make interoperation with JavaScript and adoption by JavaScript programmers easier. Reason can access both JavaScript and OCaml ecosystems. OCaml, a functional programming language with infered types, was created in 1996. Reason builds upon the rock solid type system from Ocaml while focusing on both simplicity and performance.
Reason was created by Jordan Walke who also created React.js. If you like programming in React.js, you should watch Jordan’s recent talk at ReasonConf where he gives a few reasons why Reason is worth learning.
Rust
Rust is a statically typed programming language focusing on safety, speed, and concurrency. Rust is a system language which means it generates the best possible machine code with full control of memory use. Rust is memory safe by default: all memory accesses are checked. The language is partially influenced by functional programming and its type system is similarly rich to Haskell’s. Rust can be also compiled into WebAssembly which runs in each major web browser at near-native speeds.
Rust was created at Mozilla by Graydon Hoare in 2006. As the web slowly but steadily moves towards WebAssembly and in some degree to serverless, it may be a good investment to learn Rust. Don’t take my word for that, but rather watch the following talk by Steve Klabnik
Dart
Dart is an object-oriented, garbage-collected programming language with inferred types. The language supports various compilation methods. AOT (Ahead-Of-Time) compilation allows Dart to produce native code while JIT (Just-In-Time) compilation significantly improves the development experience with features such as hot-reload. Dart can also compile to JavaScript. Since the version 2.7 the language also supports null safety, i.e. accessing object references safely without triggering null reference exceptions. Lastly, Dart is the language of Flutter, the mobile (soon web) framework that’s taking the world by storm.
Dart was created by Lars Bak and Kasper Lund.
I greatly enjoy Bob’s Nystrom articles and talks. In the following video Bob along with Kevin Moore explain why Dart is a programming language choice with no compromises.
Nim
Nim is a statically typed compiled programming language with a syntax inspired by Python. It was designed to be as fast as C and as easy to read as Python. Being a compiled language, Nim is fast. It combines concepts from languages like Python, Ada and Modula. Some describe Nim as an easier to learn Rust or as a faster Python. It can be compiled to C, C++, Objective-C or JavaScript. It offers both automatic memory management (via Garbage Collection) and manual memory management. What sets Nim apart from other programming languages is its metaprogramming features with a powerful macro system in particular which allows manipulating the syntax tree to write custom DSLs.
The lanaguage was created by Andreas Rumpf.
In the following video, the creator himself, explains the almost magical power of the Nim programming language.
Bonus: Joy
As a bonus, I’ve selected one of my favourite programming languages and one that is completely different than anything you may have experienced. It’s called Joy and it is a purely functional programming language devised by Manfred Von Thun. Whereas all other functional programming languages are based on the application of functions to arguments, Joy is based on the composition of functions. Every Joy function is unary, taking a stack as argument and producing a stack as value.
There is no video for this one, but I encourage you to read (at least 3 times) the following Rational for Joy by Manfred von Thun.
As programmers we are supposed to constantly seek how to improve your practice, and eventually, how to expand and improve it. By being able to compare and contrast various technologies, you will be able to quickly learn what they bring to the table and in which context they could be used. Hopefully my list helps you in that journey. Good luck!
Are you planning to learn other programming languages in 2020 ? Let me know in the comments!
Still reading this far ? Great! Let me invite you to my YouTube channel where I teach programming using different programming languages. It's free and there is not catch. :)
Top comments (46)
Kotlin
F#
I have a deep admiration for F#, and for ML languages overall. I was in fact debating between Reason and F# and eventually went with the former. F# is without a doubt a great candidate to learn in 2020!
Definitely F# over Reason. F# may be a small, tight-knit community, but Reason just seems dead. Libraries seem to be going stale faster than new, innovative ones are released.
I was tried Nim 2 months ago and I think I will stick with it.
You can be productive in the very first days. Nim is cross-platform and recently hit v.1.0.0 (currently 1.0.4).
The community is quite small but very helpful with a family atmosphere around.
Great to hear that! What's your primary programming language? I'm curious about your experience learning Nim
I am not a professional developer. I am a hobbyist web developer.
I started with PHP, then Ruby and Rails and the last Python. Then I became curious about compiled languages. I tried a little from rust, go, crystal but found Nim was better for me. I would love helping to improve the web dev area of Nim.
Almost totally agree with the list. Rust is on my list too, though I am puzzled to see Rust and not Go as well, since concurrency gets mentioned.
I feel Rust is (just slightly) underrated while Go is very popular. At least that's my impression, e.g. many of my friends use Go regularly, but there are only a few who use Rust. In the article I wanted to promote those less popular languages according to my sentiment.
How about golang , wasn't not faster than rust ?
Golang faster than Rust? I'd be amazed if that's true given Go's GC vs Rusts static memory management. Do you have any sources to support that statement? I'm not being aggressive, I'm happy to be proven wrong, but if you're making a statement like that it needs some backup. A quick Google certainly disagrees: benchmarksgame-team.pages.debian.n...
Though there are good reasons to choose go above rust (and vice versa) speed I don't think is one of them.
For the speed it may depend how you measure it. For me, golang is very popular right now. The idea for the article was to promote (more or less) emerging languages. golang is a great language nonetheless
Cool article! Thank you! 👍
PS
You have a typo "pwoerful" 🙃
Fixed. Thank you!
Another typo: "lanaguage"
I've missed this one! Thank you! 👍
You're welcome!
What about Julia rarely see anyone talks about it
Initially I wanted to include Julia, but then I just decided to keep the list short. Julia needs more attention, indeed. I should add it to the list. FYI Stefan Karpinski was at PolyConf in 2015.
ATS! I am currently studying it. It is one of a kind. Functional programming with performance competitive with that of C, built upon dependent types, theorem proving, and linear types. There are loads of cool features, and it is being actively developed.
Are you seriously not mentioning Kotlin?
And mentioning dart for some reason
There are a loads of not-mentioned-programming-languages out there.
Why do you think Kotlin should be listed?
Its on my list to investigate Kotlin to modify Swift code for iOS ( and MacOS ) projects for Android
I've given up on Flutter. It messes with my mind too much and when I'm checking back and forth what native code it produced. It's actually faster to maintain 2 codebases.
I mention kotlin in particular because it's still a new language. A new language that has already taken over Java in the realm of Android and is on its way to become the go-to language of the mobile world with kottlin multiplatform.
Pivotal has already announced they fully support kotlin for spring framework with DSLs and documentation and other ways. This means that new server side applications are going to be written in kotlin, not Java. And many old applications will be converted over.
In the realm of native compilation, kotlin native is already making its way to rasberry pi and also into mobile optimizations that better run natively than in jvm.
Finally, KotlinJS is still early but has huge potential to allow us to program webpages in kotlin then transpile to js. Which means full stack kotlin could very much be a reality in the coming years. Notable projects are create-kotlin-react-app which allows us to create react apps with full kotlin DSL. Another project that can lift this up to the sky is Dukat which would allow automatic interface generation for typescript libraries in kotlin!
So my friend milosz, would any other language compete with kotlin in terms of future career boosting!?
One thing common in all posts of this type is that I don't understand what problems are these new fancy languages trying to solve!
True!
Some comments may only be visible to logged-in visitors. Sign in to view all comments. Some comments have been hidden by the post's author - find out more