A non-technical colleague asked me the other day for a brief run down of the programming language landscape.

“Well, it’s simple really…”, I replied.

Then I realised it’s not simple at all.

So, I decided to write this in high level field guide so that non-developers can understand a little bit about the different languages and what they mean.

If you’ve ever been curious about why there are so many different programming languages, or why you would use, say, Java over C#, or what exactly SQL does - then this guide is for you.

Key terminology

Before we dive in, we need to cover a bit of key terminology.

Frontend vs. backend

Some languages lean more towards frontend or backend. This is not a fine line by any means, it’s more of a spectrum.

Broadly speaking, frontend has to do with what the user sees and how they interact with the system, and backend has to do with the details of how the system stores data.

In short: frontend is something you can see and click on, backend is something you don’t see and can’t click on.

Developers will crucify me for this explanation, but it’s close enough for our purposes.

General purpose vs. non-procedural languages

There is a difference between general purpose programming languages, and non-procedural languages.

Examples of general purpose languages:

  • Python
  • Java
  • C++

Examples of non-procedural languages:

  • HTML
  • CSS
  • SQL

General purpose languages are used to actually write programs in. That is, a software system that does this:

Input -> Process -> Output

These languages are highly flexible and can do almost anything you want.

The web browser you are using to read this right now is written in one of these languages (most likely C++).

General purpose languages are a bit like a meccano set you can use to build your own robot that will complete almost any kind of task.

Non-procedural languages are much more limited.

They are more like a specification, or blueprint that you give to a robot that’s already been built.

For example I created this web page using HTML and CSS. These languages describe to your browser exactly how the web page should look, but your browser does the actual work of presenting it to you on the screen.

Non-procedural languages are broadly speaking simpler and easier to learn, but less flexible, than general purpose languages.

Top general purpose languages ranked by popularity in 2019

There’s no definitive answer to this, since it’s quite hard to measure, but according to Stack Overflow the top languages ranked by popularity are:

  1. JavaScript
  2. (HTML/CSS) - non-procedural
  3. (SQL) - non-procedural
  4. Python
  5. Java
  6. C#
  7. PHP
  8. C++
  9. TypeScript
  10. C
  11. Ruby
  12. Go
  13. Assembly (!)
  14. Swift
  15. Kotlin
  16. R
  17. VBA
  18. Objective-C
  19. Scala
  20. Rust
  21. Dart
  22. Elixir
  23. Clojure

So which is the best?

One might be tempted to assume that the most popular language is necessarily the “best” one. That would be logical.

In reality, this is a far more complicated question.

Different languages are suited to different tasks and often (but not always) popularity can be inversely proportional to how well-designed and easy to use the language is.

This is because network effects are a huge factor.

There are loads of Java jobs, so programmers learn Java, so there are loads of Java programmers, so companies choose Java… and the cycle continues.

Languages with network effects can have all kinds of design problems that make them hard to use or clunky, yet as long as they still basically work they will remain popular.

Another great example of the network effects phenomenon is JavaScript.

JavaScript is a complicated language, difficult to learn and has a tremendous number of design flaws.

There are many nicer languages out there, but JavaScript was the only language supported by web browsers for a very long time which has contributed enormously to it’s popularity.

If a language doesn’t have network effects (it’s new, or niche) then it has to compete solely based on technical merit. You can generally spot these at the bottom of the list.

Elixir is a great example of this. It has zero corporate backing or advertising budget and was mostly developed by just one guy (José Valim). It’s also relatively modern at just 8 years old, which is young for a programming language (for contrast, Java is 24 and C is nearly 50).

That it’s made it onto the list at all is an enormous testament to it’s beautiful design and solid fundamentals.

(Not that I’m biased or anything…)

A layman’s field guide to the top languages

Here we get into the hairier part of this post, where I attempt to give a 3 bullet summary of each language.

This is by no means intended to be a complete education on programming languages, since that is wildly complicated and involves all sorts of historical, technical and political factors.

It is useful, however, as a kind of “Cliff’s notes” that non-developers can use to get some idea of the software ecosystem and which niche each language occupies.

1. JavaScript

  • THE web language, it runs in all browsers
  • Originally used to jazz up web pages (frontend)
  • Explosion in popularity is partly due to large companies backing it via frameworks e.g. React from Facebook, Angular from Google etc
  • The most widely deployed language, and the only language you can realistically use to write a backend, frontend, mobile app, game, cli, AI etc
  • Both loved and hated by devs, a moderately difficult language to learn due to it’s quirks. Has quite a few design flaws

2. HTML/CSS

  • Languages used to describe how web pages should look. Literally anything that displays a web page will need both of these
  • Almost always come as a pair (HTML without CSS is unimaginably ugly, CSS without HTML is useless)
  • Cannot implement complex logic on it’s own (for that you need JavaScript)

3. SQL

  • Used to retrieve data from a database
  • Important for data analysts, data scientists
  • Most developers will probably need to use SQL at some point in their career

4. Python

  • Easy to learn
  • Generally used for data processing but can be used for all sorts of other tasks, mostly on the backend
  • Growing in popularity due to it’s good design and beginner-friendliness

5. Java

  • Has absolutely nothing to do with JavaScript except that they both start with the same four letters
  • Very popular in “big corporate” e.g. banks
  • Clunky, not particularly well-designed language
  • Used to build large-scale backend systems and Android apps

6. C#

  • Microsoft’s answer to Java
  • Almost exclusively used on Windows machines. Also popular in “big corporate”
  • Both frontend and backend applications e.g. web servers, games, windows applications

7. PHP

  • First popular backend language for the web
  • Popularity these days mostly driven by historical effects. Notably powers Wordpress and parts of Facebook
  • Horribly designed language

8. C++

  • “C with extra bits”
  • It’s what we call a systems language (low-level but faaaaaaast)
  • Used extensively for desktop applications, games, databases, operating systems…
  • Notoriously complicated and difficult language

9. TypeScript

  • Basically JavaScript with a few extra bits aiming to tame some of the wilder parts of the language and make it safer
  • Supported by Microsoft (which largely explains it’s popularity)

10. C

  • The grand-daddy of systems languages
  • Used literally everywhere (drone software, operating systems, games, the software that runs your fridge)
  • Extremely difficult for beginners (or just about anyone really) to use safely for large programs

11. Ruby

  • Beautiful, beginner-friendly language
  • Made popular by Rails
  • Declining in popularity these days, mostly due to competitors to Rails (e.g. Python/Django)

12. Go

  • Beginner-friendly alternative to C/C++ that addresses a lot of the design issues
  • Backed by Google
  • Low-level language for writing fast backends

13. Assembly (!)

  • Lowest level, most raw way of programming a computer
  • Most likely used when extremely high performance is required (high speed trading) or for embedded systems (engine control computers, robotics etc)
  • Highly specialised, you almost never need this

14. Swift

  • Created by Apple
  • Reasonably modern language with some nice design choices
  • Basically your only option these days for programming Apple computers and iPhones

15. Kotlin

  • Alternative to Java (and far better designed)
  • Runs anywhere that Java can
  • Often used for Android apps

16. R

  • Used exclusively for data science and statistical analysis

17. VBA

  • Backed by Microsoft
  • Horrible scripting language that is nonetheless wildly popular in the corporate world
  • The primary way to add advanced functionality to Microsoft products like Excel

18. Objective-C

  • Swift’s predecessor (now on the decline)
  • For many years it was the only way to write applications for Apple computers and iPhones
  • Based on C originally (like C++)

19. Scala

  • Another alternative to Java
  • Highly flexible and not particularly beginner-friendly
  • Generally used for backend work (e.g. Twitter uses it heavily on the backend)

20. Rust

  • Alternative to C++ backed by Mozilla
  • Loved by developers
  • Extremely difficult language, popular because it solves some very difficult and fundamental problems of C++

21. Dart

  • Frontend language, backed by Google as an alternative to JavaScript
  • Allows you to write mobile apps that run anywhere (web, iPhone, Android)

22. Elixir

  • Highly scalable, beginner-friendly backend language
  • Developed by a small, non-corporate community of enthusiasts
  • Based on Erlang, which famously powers Whatsapp

23. Clojure

  • Another alternative to Java, runs anywhere that Java can
  • Advanced and flexible language developed by a small, non-corporate community of enthusiasts
  • Generally used on the backend and particularly well-suited for building data processing pipelines

That’s it! You now understand all of the major languages used as of 2019 and how they are positioned in the software ecosystem.

If you have any questions, feel free to leave a comment below and I’ll do my best to try and clear things up for you.

Thanks to Chris Gregori for reading a draft version of this.