An utterly subjective Tier List of programming languages

Michael Francis
8 min readApr 19, 2021

--

I was brutally introduced to the concept of a ‘Tier List’ by my 15-year-old son. I say brutally, as he had me watch a YouTube video depicting one person’s ranking of the top programming languages. I don’t know if the intention was to make a grumpy old programmer seeth or an honest attempt to recommend it. In any case, it kicked off a long conversation with my son about what I thought made good programming languages.

I do not claim objectivity, nor that I am unbiased; these are just the views of a person who has been programming since the nineteen-eighties and professionally since the mid-nineties. These are also all languages that I have programmed in a professional capacity.

I will use the same scale as used on YouTube; the scale starts with ‘S’ as the top level and then runs ‘A’ through ‘D’, inexplicably skipping ‘E’ and ending with an ‘F’ grade. It hurts my eyes, but I am reliably informed (by my son) that this is how the ‘cool’ people do it.

Arbitrarily I’m going to start with the C programming language. While not the first language I learned, it formed a large part of my early career. As an anchor, I will place the C language as a ‘C’ on the scale. I used to love programming in C, and I will say that the fears of memory management are wildly overblown. You have to know what you are doing. Let’s face it, the computer you are reading this on right now is almost certainly running a kernel with is written in C. I would not recommend that people learn C today as a first language, nor even go down that path unless there is a compelling reason; there are plenty of better available today. The critical exception being for those experimenting with microcontrollers where C is still somewhat of a defacto standard.

Next, Perl, ah Perl, the unloved language on which I cut my professional teeth. Along with Sed, Awk, and Bash, it was the language to get stuff done. There is no need for a compiler; it had reasonable error messages, and you could build reliable and scalable applications to bend a computer to your will. With Perl, I got my first understanding that you could create a tool that reliably ran, giving me the option to go home at six o’clock vs. my predecessor, who would stay till late at night, ensuring the end-of-day had completed. So, where do I place Perl today? I put it firmly as an ‘F’; do not use it unless there is an emergency and you have to dig out some old code. If you happen to find a comment in some Perl code saying, ‘Mystical, magical incantation time,’ then that was some code I wrote. It thoroughly explains the following line of code.

Before Perl, I encountered Basic, Logo, Pascal, Matlab, and a little FORTRAN. The latter to help my father debug his surveying calculations. I also turned my hand at Assembler, which certainly gave me an understanding of computers’ inner workings. I’m making the executive decision not to place these on my scale. Matlab and FORTRAN have their niches, but the others are relics of the past.

C++, truth be told, I learned C++ before I learned C. At university, I escaped Pascal programming by turning in my solutions to my professor as C++. I was fortunate that he was accepting, and by the following year, the Pascal classes had turned into C++ and Matlab. I have to date, written more code in C++ than any other language. The code was all written in VI without the syntax highlighting and intelligent suggestions of today’s IDEs. When I read that back, it sounds a little arrogant; that’s not intentional; if you see my desktop today, you will observe that I pay out of my pocket for the best-in-class IDEs and environments. So, where does C++ land? It’s definitely above C, so I’ll place it as a ‘B’ language. Well worth learning and an excellent tool for getting a job done.

Jumping back to languages that I would place as a ‘C,’ I will put Java. I almost certainly wrote the first few Java code lines at my employer when Java first came out. I was programming in C predominantly at the time, and the idea of a language for which you could ‘Write once, Run anywhere’ was a game-changer. Couple that with the garbage collected run time, and I was excited. It was eighteen years later before I ended up writing Java in a professional setting. Thank heavens for the IDEs writing all the boilerplate and supporting efficient refactoring! I want to say that I enjoyed writing Java, but I can’t. There is something about the language that encourages obfuscation. If I have to talk to somebody about the facade they have built for which there will only ever be one implementation, I think I’m going to scream.

My judgment on Java was likely warped by trying to coerce Java generics to ‘do the right thing.’ Reified generics can cause so much pain. So then came along C#. I had a consultant working for me at the time, and we needed to port the Java client-side code to C# to deliver to the business. He was estimating that this was going to be a six-week build. We turned this around in a weekend; the C# code was roughly one-third the lines of code compared with Java, was more understandable, and played into the C# idiomatic way of doing things, sold! So I place C# (the better Java) as a ‘B’ language. It’s more productive, and you can ‘just get stuff done.’

Ah, Julia, I was one of only a handful of paid professional Julia developers in the world for a year or so. There is a crazy brilliance to Julia. It’s a language that you can make dance. One line of Julia can be more expressive than an entire page of a different language. I heartily encourage people to explore the Julia language and see what a language can be. So why do I say was? While I was heavily involved in the Julia language ( I wrote the original implementation for NamedTuples, before core language support), we could not get the traction and acceptance for the language. It lost out to the defacto standard language of the moment, Python. More on Python in a minute. Where do I place Julia? I want to put it as an ‘A’ language but simply can’t, so a ‘B’ it is. I hope that more people take it up in the future.

Python is the language that, for us, took off instead of Julia. It’s generally like many other slow-interpreted languages; it’s relatively easy to write and has a comprehensive set of libraries available in many domains. Python is the language of mindshare … it’s taught in schools and is the defacto standard of the day. I warned you up front that this was my opinion but, having been burnt by space sensitivity in early languages, I do not want a language where space is meaningful to the flow of the program. For me, Python is a firm ‘D’ grade language. There are much better languages; if you have to use Python for a specific library, you should use it but, consider other options.

JavaScript is the other defacto standard programming language in the enterprise other than Python. I’ve written a lot of JavaScript, both in the browser and in Node. JavaScript has its odd parts; grab the book — JavaScript the Good Parts. When applied in a functional style (look at the implementation of D3, an excellent library for visual representation), it is fast, easy to read, and exceptionally portable. Everybody should learn JavaScript; it is essential for the modern web and, don’t forget the backend. Today I’d place JavaScipot as a solid ‘B’ language. I also put TypeScript, which compiles to JavaScript with type safety and syntax improvements, as a ‘B.’

A language that you almost certainly will not program in is Slang. This language is a language developed internally by one of my prior employers. It was well ahead of its time. The grammar fits in a few hundred lines of code and provided rich functional programing and functionality such as slices and generators. A couple of unique features of the languages: firstly, spaces are allowed (and encouraged) in variables and function names; this leads to a literal style of programming that somewhat absent today. Secondly, parts of the language allow the definition of dependency-aware, memoized functors on objects. Think of a set of extensible closures around a data collection where the dependencies are all explicit and one chance the minimal recalculation is executed. If Slang were out in the wild, it would likely be vying for an ‘A’ / ‘B’ rating, but in its current form, I have to place it at the mean a ‘C.’

Most of my day-to-day programming is now in golang. Why go? It is the equivalent of a compiled scripting language; it is much faster than most interpreted languages ( JavaScript excepted ); it’s an expressive language that is easy to learn and powerful enough to get stuff done quickly and easily. The concurrency primitives make writing code that scales to the number of cores on a modern computer reasonably simple ( you still have to know what you are doing.) Go is also a typesafe language; it avoids many of the pitfalls you stumble into with the ‘walks like a duck’ languages. There is a lot of confidence to be gained with the ‘if it compiles, it likely runs’ programming style. So this is the first ‘A’ language on my list. Check it out, but remember that there are differences if you are coming from either an object-oriented background or a functional background. Remember, go is C without classes, with safety, and gophers included for good luck.

Finally ( for now ), Rust, Rust is a language that I have just started to embrace. It’s fascinating and has a whole host of excellent features. The generics support is first class and having hygienic macros means extending the language is a breeze ( Julia has mindblowing support for these). Rust is another ‘A’ language, though it risks falling to a ‘B’ depending on adoption. I like to think of Rust being the successor to C++, where go is the modern successor to C. The next few months will show whether Rust is the language that I want to be using.

In closing, these are very much personal thoughts, and I didn’t touch on many of the languages are respect, Haskel, OCaml, Lisp, Erlang, and their ilk. Unfortunately, while I chose to program in a functional style where I can, I have yet to find a reason to use these languages in the enterprise, perhaps one day.

You’ll also note I don’t have an ‘S’ language.

S) Null

A) Go, Rust

B) C++, JavaScript, TypeScript, Julia

C) C, Slang,

D) Python

F) Perl

--

--