## 2020-05-23

### Programming languages you should learn in 2021

This kind of title appears once in a while in feeds and in search results about languages (I do search for languages trends).

I want to make my own list. I am not going to suggest a language because they can give you a job, high salary, or because it’s what all the buzz is about. These factors mean nothing.

I am not going to explain why you should learn something about all those languages: you will get it once you study them!

Of course my list won’t contain only those languages which every employer actually and currently wants, or only languages with a lot of hype. My list will contain languages that employers should want for a particular set of tasks or software architecture in their company. Some of those languages I’m going to suggest are almost totally disregarded, few are known and maybe used in small niches, and they are not taken into account elsewhere just because… well, because “the market” is unjust and often crappy things become pretty over-used without proportional merits.

Moreover, I would like to see more variety. More languages mixed. Long story short: the reign of Java, the reign of C#, these shouldn’t exist.

Anyway… Here’s my list.

• Erlang
• Go
• Raku (Perl6)
• Smalltalk

Now I would like to add few languages I love-hate, and I’ve never studied them deeply, but I feel they are something worth learning in 2021.

• Lisp — or one of those other () language

And I would like to add also a great old but also modern one (check out the latest standard), too often seen behind the curtain of misconceptions:

• Fortran

Ok, now two less unknown or underused languages:

• Python
• Ruby

About Ruby, they say it’s going to fade, or already faded. Its thrust came mostly from Ruby on Rails, I think. As language, I like it more than Python. If you learn Ruby in 2021, anyway, you won’t regret it!

## Do not trust lists of languages you should learn in year YYYY

Of course it doesn’t make sense. Just learn whatever, but remember that the answer doesn’t need to be always Java (or C#!) 😄

If you are in the position to do it, I ask you the favor of pushing Erlang, and also Ada, whenever appropriate (the hard part is to recognize when it is, I know). I’m not asking it for Go because maybe Google is doing it well — I don’t know.

Anyhow, why you shouldn’t trust those lists (except mine, of course)?

You can read things like these:

[cons of C/C++] Plagued by the issues of buffer overflow and memory corruption

It seems like it’s those languages’ fault, but it is not. The languages don’t help mitigating the tendency of programmers (especially bad ones) to do mistakes, this can be true. But still, saying they are plagued by the issues of buffer overflow and memory corruption it’s stupidity… And it’s very likely that they wrote those silly words using an operating system and an editing program written in C++ or in C!

[cons of Java] Slower than natively compiled programming languages, like C and C++

This myth of needing speed. I’m a Java hater, but this makes no-sense because 1) very often, more often than usually is recognized, companies don’t need speed in the sense of computational power; 2) JIT compilation is enough for all the “enterprise” usage of Java — and if not, write the computationally intensive stuffs in C (you can call C from Java, you know, and also viceversa…)

And they say nothing about the null pointer exception!

[cons of Go] Absence of a virtual machine makes complex programs less efficient

What? A new level of non-sense. Java runs on a VM and it has the cons of being slower than natively compiled languages. Go is natively compiled (as C, C++, …) and that’s among cons because evidently complex programs need a VM to be more efficient!

Another cons of Go:

No GUI library

Well, as C, C++, and many other if you add in the standard library. But often it’s just false — in fact surely there are Go bindings for common GUI libraries like Qt or GTK.

Morevoer, this is written clearly thinking about desktop and average users who think that programs must show themselves in a nice and graphical way.

Are you going to write desktop application in Go? Maybe not. Because of this do I need to list among cons the fact that there’s no standard GUI library? (Like in C and C++, again…)

Here a con of C#

Almost all variables are references and memory deallocation is implicit using a garbage collector

That’s the same in Java. But Java hasn’t this particular con. It has this one instead:

Expensive memory management

It is so because Java has a garbage collector. And objects are always references implicitly deallocated.

Among the cons of C#:

Requires decent effort and time to learn

That’s true for Java, C, C++, and many more.

Resolving errors requires serious expertise and knowledge

Why resolving errors in C# should need more serious expertise and knowledge than the one needed to resolve errors in, say, Java?

That’s crap written by someone who had to fill in a list but who does not really know the matter.

And for this, do not trust lists of “programming languages you should learn”, especially when they try to add a list of pros and cons. I did not, so you can trust my list!