Just so you know – with programming your salary is not exactly about the language you chose (any capable programmer can pick up a new one in a manner of days) but your expertise in general. The list of the highest paid programming languages below does not guarantee the precise salary – just an average.
Therefore you should aim towards a specific goal. There are multiple options – mobile development, websites (both part that ends users see and it’s logic aka back-end), desktop, microcontrollers, AI, game dev… literally endless possibilities here.
In theory – reaching an okay understanding of back-end and front-end is a guaranteed supply of cash (albeit lousy one at the start because you have to compete vs Indian devs, it gets better once you make some kind of reputation for yourself) via freelancing.
The 6 highest paid programming languages as of 2020 are:
According to StackOverflow, Clojure is number one on the highest paid programming languages list with more than $72,000/annually.
Clojure is getting popular because it’s a simple language that solves a lot of real-world problems that aren’t addressed by most other languages.
Since Clojure is backed by immutable data structures it makes it much easier to reason about code. You can safely consider a piece of code in isolation without having to know the state of the entire application.
This also makes it much easier to write applications that deal with concurrency and parallelism. Clojure provides many excellent concurrency primitives in its standard library and the recent addition or reducers and core.async augment this toolset even further.
Clojure is very expressive, you can write code that’s terse and to the point with minimal ceremony or boilerplate. On top of that, macros allow easily abstracting of repetitive patterns in your code.
Being hosted on the JVM means that Clojure has a mature runtime with lots of existing libraries available. In TechEmpower benchmarks, Clojure frameworks are doing quite well and are far ahead of Ruby and Python equivalents.
Functional programming is definitely something that’s worth paying attention to and learning. There are more and more success stories from companies using Clojure in production, and there’s no reason to expect this trend to change in the foreseeable future.
Rust is new enough that you can write useful stuff that would have already existed in other languages (if that’s up to your alley). Currently, takes the second spot on the highest paid programming languages list with $65,000/annually.
If you want to learn systems programming, having rustc as your coach will keep your head free to worry about other things than memory safety. As one famous programmer once said: Pascal is like wearing a straightjacket, C is like playing with knives, and C++ is juggling flaming chainsaws. In that metaphor, Rust is like doing parkour while suspended on strings & wearing protective gear. Yes, it will sometimes look a little ridiculous, but you’ll be able to do all sorts of cool moves without hurting yourself.
Cargo is awesome. Managing crates just works as intended, which makes a whole lot of troubles you may have in other languages just vanish with a satisfying poof.
The community is awesome. So awesome I felt compelled to blog about it.
Quote of the week: “Rust is like doing parkour while suspended on strings & wearing protective gear. Yes, it will sometimes look a little ridiculous, but you’ll be able to do all sorts of cool moves without hurting yourself.”
Elixir does things a little differently than maybe more popular “C style” languages. This might be problematic if you decide later you want to do those jobs as well. For instance, Java, C++, C#, C, and others all have the basic same syntax, but make different changes to suit the language needs.
Elixir/Erlang’s power is usually not necessary for applications so they go with what students are being taught in school, and thus a larger employee pool to chose from.
So is it good for beginners? Probably.
Is it currently suggested if you need a job in the future? Maybe not.
Does it teach you good fundamentals? Yes.
Does all the syntax/fundamentals translate over to other languages? Not as much as others.
Syntax differences are trivial, next is a paradigm (procedural, inheritance-based oop, functional, logic-oriented, and so on). And much more effort is always the quirks, especially considering performance, standard library, best practices, and Frameworks. To top it off, those are usually dependent on each other and subjective.
This is why C++ takes so much longer to learn than C – its standard library is much larger, and like Java, it overlaps with the language to some extent due to operator overloading, templates, etc.
Now, as a functional programming language, I feel F# still isn’t as powerful as OCaml or Haskell. On the other hand, OCaml Multicore isn’t still a reality, while F# is already ready for concurrent programming. And both OCaml and F# have a gentler learning curve than Haskell.
In an ideal world Standard ML (SML) would be more popular. Alas, it has very few libraries.
Otherwise, F# is a very well designed language with immutability by default, sum/record/tuple/option types, proper pattern matching, a REPL, a great async library, “monad comprehensions” (almost), and good editor support. It’s also more opinionated about being an FP-first language than scala and IMO has cleaner ML-style syntax.
Even without type-classes, it blows Java, C#, JS, etc… out of the water.
Overall, it’s a solid language with a strong ecosystem of packages and interoperability, but man the tooling… A solid linter would’ve been nice for our CI too since we had issues maintaining some F# standards, but that’s just nitpicking I guess. Probably won’t use it again though, not really my cup of tea.
Go has some impressive tools built up around it. The package management is nice, and the testing story is also pretty good–as in, like, I think both of those are easier/better integrated for go than for a lot of other languages.
(For reference, my background is primarily C#, where your package manager is Nuget unless it isn’t, and you write tests using … Well, whatever your boss tells you to.)
Go also has an automatic formatter, which is often cited as its killer app, and a pretty powerful linter, which I think is its real killer app. Without that, I’d have never managed to produce any working code.
The biggest advantage, though, is that Go is a severely limited language.
Yes, you read that right. Severely limited. It’s not just missing generics–Go is missing something like 30 years of programming language theory and practice. I’m not going to go into what, exactly, is missing, and I’m not even going to talk about why–I’m just here to tell you that, if Go is the language for you, then all of that is a good thing.
What this means is that, in Go, there’s often literally only one way to skin a cat, and there’s usually not more than two. Compare this to a more expressive language, like C# or Java, or even just a more mature language (…yes, that’s a dig, but it’s mild. 🙂 like C++, where you’re going to see a dozen or more ways to do something as basic as reading lines of text from a file and it quickly becomes apparent how this can be a good thing.
As for the cons? Performance (for a native language) is on the slow side, it has a garbage collector (within the latest versions–some very frequent pauses), and it’s extraordinarily limited in terms of how you can and can’t express logic.
I strongly suggest that people learn languages without regard for the task they might use it for. It’s a tool and you put it in your toolbox. You learn the tool on its own terms. Later, you have a problem and you have some tools to apply to it. Different tasks might use different tools. You should have more than a couple of tools like that. Some people may suggest Ruby or Python. My comments apply to them too. Try those languages too. You don’t have to choose a side (and if someone is trying to make you choose sides, find better people).
When you start with the task, I’ve mostly seen people learn just enough to piece together something that solves the problem. Their solution tends to be ugly. It’s why people think Perl is unreadable—a lot of people not only don’t understand what they wrote but don’t even know why it works. Although they have “solved” their problem, they haven’t really put a new tool in their toolbox. They don’t have something that they can apply to a new task.
Spending time with Perl won’t be a waste of time if you learn correctly. You might not use Perl later, and you may not even like it. However, the ideas you run across will feed into how you think about other languages. Any language is going to think about some things in a completely different way than illuminates how another language does things. However, you have to know how to learn, which is something that goes beyond applying the minimum knowledge to a task.
The other advice I give is to find what the people in your field of interest use, and use that. It’s easier to communicate with other people when you’re using the same tool. While you’re doing that, you might explore other tools for the parts you find their tool doesn’t do well.