What Language Should You Learn?

Most of us have stopped at various times and thought that it’s time we learned a new language. But if you’re anything like me you’ve got analysis paralysis. So let’s go through some of the options.

Matt Burgess
10 min readDec 8, 2024
The donut. Definitely the donut.

Right out the gate, I’m going to be listing a bunch of languages but this isn’t a quality comparison. The languages we’re talking about here are all excellent. They’re all brilliant solutions to a related set of problems. Some take different approaches, which aren’t better or worse. They might mesh with your own mental models or interests better, but it’s not at all reasonable to just go assessing them in some objective way. This isn’t a tier list.

Languages aren’t objectively better or worse, but have trade-offs, common use cases, benefits and costs. Some might be better for one developer or for a team.

I’m going to group these languages into three loose tiers, essentially as beginner, intermediate and expert.

Now for an absolute assload of qualifiers and prevarications.

  1. None of this hard and fast and it’s my own subjective opinion
  2. None of this is binding – if you’re a new grad and you want to go straight into an expert language, feel free
  3. Prevarication is an excellent word
  4. There’s a baseline assumption here of knowing basic HTML and CSS already, and a little simple JavaScript
  5. Some people like or hate a language for arbitrary and personal reasons, including me and that’s fine
  6. This list is limited to web development specifically, because that’s what I do
  7. This list is not intended to be comprehensive, it’s just the greatest hits. I don’t care that Dart can technically be used to make a server.

With all that out of the way, there are about 27 different metrics we could talk about here. Compile speed. Run performance. Development speed. Ecosystem. Ease of access. Employability. Or just some overall wooly vibes.

We’re not going to chart anything of this or make radial graphs because that sounds too much like math but we’ll factor them in. Some will matter more in some positions and fade out over time.

Ultimately there are three tiers here corresponding to a sort of junior, intermediate and senior developer. These tiers don’t constitute any sort of language hierarchy. If you’ve been developing for a while there’s a pretty good chance you should be starting to think about “leveling up” your skills.

The purpose of this list is to give you some idea what your next step might be and what you should consider.

There are really two possible end-goals for any potential language here. One is to be able to solve a new set of problems that you can’t solve yet. The other is to solve problems that you already have solutions to, but want something a little better, for unknown values of “better”. Maybe it’s performance, ergonomics, or maybe you’re looking for a new position.

I tried to make it clear before that there isn’t a hierarchy here, that languages aren’t better. This isn’t to say that the higher tier languages don’t have distinct advantages, just as they have distinct cons. They are – as a general rule – harder and slower to use, with a higher threshold of baseline technical knowledge, but significantly more performant, stable and less error-prone.

With all the caveats caviated let’s jump into some languages.

So you’re a new developer

Ah, fresh meat. New and junior developers have some excellent choices. There are a bunch of what I consider baseline languages which are a solid grounding for a professional developer. They’re the sort of thing most developers are either learning or mastering.

These are languages like Python, PHP, JavaScript and TypeScript, and Ruby on Rails.

I don’t want to bury the lede here. The correct answer is JavaScript, ideally with TypeScript.

If you are looking for a job as a Python dev you need to find a company using Python on the backend, so let’s assume that maybe 5 backend languages divide the market evenly, which isn’t true. 20% of jobs will have Python. The same applies to PHP, only 20% of dev jobs will actually value PHP skills.

And for the record that doesn’t mean you shouldn’t be looking for these jobs. But 100% of those companies using Rails on the backend or .Net will be using JavaScript on the frontend anyway.

JavaScript is simply a reality in the world today.

A special commendation goes to PHP. PHP is dying now and will soon be obsolete. I know that because people have been telling me for at least 15 years.

In truth PHP is a powerful and eminently useful programming language. The Laravel framework in particular is probably the single most bang-for-buck of any language or technical solution. If you don’t like the language that’s fine – I’ve moved away from it myself. But trashing it just for the memes makes you a sheep. Laravel gets shit done.

It’s difficult to recommend some of these languages – Python or Ruby for example. There’s nothing wrong with them, they’re great. It’s just hard to recommend them in favour of something like JavaScript.

The simple fact is that higher level languages can be more performant or have less latency or a bunch of other technical benefits. But this tier will solve 99% of web development requirements and build almost anything you want to build.

Don’t listen to anyone sneering about scaling or performance. A friend once told me snidely that Rails was too slow for Twitter and they had to rewrite. “Sure. But it was fast enough for them to become Twitter.”

Become Twitter first. Build. Launch. Solve problems. Release.

Intermediate Developer Thinking about their future

So you’ve been working a few years, maybe 3 to 5 and you’re getting pretty good at a something. Maybe you’re doing a lot of Python and a little JavaScript on the side, and you’re wanting to branch out. Here’s what your options are.

Golang

Go or Golang is an interesting tech. I skipped learning this for a long time because I didn’t like the struct-based object pattern, but after I used it for other languages – particularly Solidity – it stopped seeming weird and wrong.

There are reasons to like Go. There are reasons to use Go over JavaScript. 90% of stuff can probably be done with JavaScript, but that still leaves a fair amount. Go is significantly better performing than JavaScript in a particular way. JavaScript has a “garbage collector” that allows it to manage memory usage for you.

This garbage collector will block the main executing thread every now and then, do a little spring cleaning and then back to work. Most of the time this doesn’t matter, but sometimes it does. In the time that thread is stopped various events or processing could be needed, and not be available, leading to dropped or missed execution. Golang has a garbage collector as well, but it doesn’t block the thread.

Golang particularly excels at creating microservices, or small services or workers to handle occasional – or continuous incoming work. It’s less optimized around the straight web applications of something like PHP, but it’s becoming increasingly competent. The latest version has robust support for web servers at around the level of a NodeJS Express app. So… not great, but good enough.

The one thing I miss personally is that Go doesn’t have a robust and feature-rich batteries-included web framework like Rails or Laravel. This is a personal preference of mine. A lot of people don’t like them, because a lot of people are wrong.

One thing that differentiates this level and above from those below is that level 2+ is almost always compiled, while level 1 is universally interpreted. This is an important distinction and is a significant part of where the difference in performance comes from.

Interpreted languages are ones where the scripts are executed directly from the human-written code. Then there’s an interpreter that has to understand that, and do a translation for the system. In compiled languages, the code written by the user is smashed down into machine code that is what the system can actually execute directly. This is more efficient and better optimised. While this is a gross oversimplification, and some interpreted languages use a JIT (just in time compiler) it’s good enough for government work.

Gleam

Gleam is the newest kid on this block, and is an offshoot of Elixir, which we’ll go into in more detail. It’s kind of a simplified version, with a subset of features, and built heavily around web APIs.

Gleam is cool but it’s way too new to actually recommend in any way, especially for professional usage. If you wanted to learn it out of interest (and I do) then go for it, but it’s hard for most of us to justify the time.

Experienced and senior developers

After about 10 or 15 years there’s a pretty good chance that you’re dictating the stack, not the other way around. And for a smart developer that often means sticking with tried and true technologies like Rails. But that doesn’t mean you should stagnate your own career.

These are some powerful and performant languages. What makes them “good” can vary, but it’s not ease of use.

If you’re using languages at this level it’s because you’re handsome and smart like me. Except to be honest I don’t actually use these much at this point. And I’m not handsome. Or smart.

Elixir

Elixir is a beautiful language. It’s functional in a way that isn’t a compromise, like “functional JavaScript”. This is balls-deep functional and if you don’t like it you’re wrong and need to get with the program, you shitty Java dev. I’ve been condemned for my ability to let go of the OOP paradigm because I asked for basic syntax for a function.

I really like Elixir but “FP bros” can FP my balls. “It makes code easier to reason about” my aching butthole. Support your arguments with something that isn’t a smug cliche.

But I digress. There are some elegant and intuitive patterns used by Elixir once you get over the wildly unfamiliar syntax. That said, that syntax is deliberately modelled after Ruby, so if you’re coming from a Ruby background the transition is pretty reasonable.

Phoenix is an incredibly powerful framework with rich features that would be an absolute baller to build a solid business on. I honestly wish I had the time to learn more Elixir and to use it on my own projects. Unfortunately it’s impossible to recommend it in a professional sense – no one knows Elixir. And that makes it difficult to justify personal use because the knowledge won’t transfer. Of all the languages listed here Elixir is the one I’ve most wanted to learn, and even spent some time doing so, but have the most trouble justifying.

Rust

This is it. This is the correct language. It is factually right. And if you think that there is more nuance around what people know, team structure, or actual application requirements I pity you. You should stop being trash and become a Rustacean.

Seriously Rust is a performant and powerful language. It is probably the MOST performant language in common usage today. This makes it a perfect for usage where milliseconds matter, or where extremes of low latency are important.

Rust is an interesting beast. Performance is unspeakably impressive, but it’s hard to program in. I speak from experience. As your resident dumbass it’s clear this isn’t made for me. I can count from 1 to 10 without skipping many, but Rust baffles me like no other language ever has.

Rust is considered a “systems language”. Drivers, workers, services. But far less about straight web development. I’ve seen the benchmarks for it as an API platform and it’s crazy good. If you want to reach for the stars you should absolutely reach for Rust.

Oh, and skilled Rust developers also command some of the highest salaries in the industry if you care about things like that.

Zig

Want the performance of Rust but you’re a loathsome hipster? First of all, fuck you, but secondly have you heard of our lord and saviour Zig?

All the performance but with a smaller ecosystem and minimal documentation. I’ll recommend Rust to anyone with a need for it, but I can’t justify advocating Zig to anyone really while Rust exists. This isn’t a criticism of Zig at all, I just think there’s a bit of an opportunity cost to it, time that would be better spent rusting.

In Conclusion

There isn’t much to summarise here. If it applies, stop skating on the same technology you’ve been using for the last 5 years, and branch out into something else. Don’t step sideways, like from PHP to Python, but look for something with higher performance that will teach you better computer science.

--

--

Matt Burgess
Matt Burgess

Written by Matt Burgess

Senior Web Developer based in Bangkok, Thailand. Javascript, Web and Blockchain Developer.

No responses yet