Contents

The best programming language for backends

Disclaimer: This article contains opinions.

There’s nothing like a good, friendly argument between Software Developers. How else are you gonna spend your time waiting for your pipeline if not arguing about the most important things in life:

  • Tabs vs Spaces
  • Emacs vs Vim
  • Mac vs Linux

And of course the oldest argument of all:

<my programming language> vs <your programming language>

And to be honest, it’s actually the most pointless argument of them all. I have never witnessed two people arguing about which programming language is better where one of them has changed their opinion. Here’s some snippets that stuck with me over the years:

  • “Have you even seen what <my programming language> can do? Look at this construct, it’s beautiful.”
  • “All programming languages are horrible, but <my programming language> is the least horrible.”
  • “I don’t understand why everyone hates <my programming language>. It works fine for me.”
  • “<my programming language> + <my framework> gets the job done, so I don’t really care.”

Can you guess the languages? ;)

But here’s the gist of it all: 90% of the time, it doesn’t fucking matter.

Objective reasons to prefer a language

There’s definitely some choices to be made regarding the programming language - compiled vs interpreted, strong vs weak typing, functional vs object oriented and so on. But in the end, you can build pretty much anything with pretty much any language.

Now don’t get me wrong, there’s some cases where it does matter.

  • If you’re running on weaker hardware it might matter.
  • If you’re having a very specific usecase it might matter.
  • If you need something with high performance or low memory requirements it might matter.
  • Or if a very specific language feature or framework greatly decreases your development time or efficiency it might matter.

But most if the time you’re just building some GET /foo/bar REST server, so honestly, it probably does not matter.

Subjective reasons to prefer a language

Now given that there actually ARE good reasons to pick something specific, you need to realize that most people don’t care. And it’s a completely natural reaction to not really care about objective reasons, because you can’t argue with emotions. Picking a programming language is a bit like picking the sports team of your choice - you don’t pick it because it’s the best team, but because you like it. And you might like a language for various reasons. Maybe it was your first programming language, maybe you are the most knowledgeable in it. You might love a specific design pattern in it or prefer the way the syntax looks. Or you don’t see the point of trying something else - which, honestly, I get. Often there is no point.

Subjective reasons to hate a language

Just like you can love a language for no real reason, you can also dislike it for some of its quirks.

Here’s some things that I hate about languages I used:

  • Javascript: duck typing is horrible and the language is full of awful quirks. I recommend Javascript WTF if you haven’t found anything weird in your own JS adventures. Not to mention npm.
  • Java: is full of horrible built-in language constructs that are fundamentally broken but cannot be fixed due to backwards compatibility. Remember Cloneable? Or Serializable? wait/notify? finalize? Don’t get me started on dates…
  • Kotlin: lures you in with promises of null safety until you realize that you’re stuck with the same libraries as your Java code and have to handle nulls anyway.
  • Scala: cool language if you want to squeeze as much logic as possible into a one-liner and then watch your colleagues sweat when trying to decipher it.
  • Typescript: just like Kotlin, suffers from the legacy bullshit of its parent.
  • Go: pretty cool unless you like generics. I also hate some of the go fmt choices.
  • Python: it’s alright, but the half assed class system make you wonder what it actually tries to achieve.

Okay, but which one is best for my project?

Ask yourself the following questions:

Do I have a specific reason that influences the decision, like hardware choice or performance needs? Pick according to that.

Do I already have team members and know their preferences? Find a common consensus, or everyone will be unhappy.

Do I not know my team members but plan to work together with other people later? Pick something relatively common and popular.

Am I not planning to work together with someone else on this? Pick whatever language you love or want to learn.

Do I want to retain my sanity? Ignore the haters. Haters gonna hate.