Three Tiers of Programming Languages

Earlier today I was handed a link to a blog post proselytizing for the Julia programming language, and I was almost immediately floored because the post speaks practically nothing of Julia’s character as a tool for solving problems.

Unless I’ve been daydreaming for the past 8 years, this is all I’ve ever understood programming languages (or technology in general) to count for. How does Julia help us help ourselves? Who knows.

However, from the viewpoint of problem solving, I quickly realised that I could sketch most of our world’s programming languages into three tiers of impact, and I’d like to share that with everyone for their enlightenment. I’m also up for discussion, if you find this idea could be refined or such, this should go up on Twitter so please tell me about it there.

Tier III

We’re going to start at the bottom, and examine the lowest kind of programming languages. These languages are usually useful in so much as what people do with them nonetheless, presenting no apparent way in which the language itself aids its users, facilitates traversal of their problem domain, or the like. A very popular example is PHP, but this also includes languages like Julia, and many others we’ve yet to hear about. There is nothing unique or inventful about these languages on their own merits, but that doesn’t proclude special people from doing amazing things with them.

Tier II

In the middle layer, we have middling programming languages. These languages have a unique merit to them, and this has been demonstrated, but for one reason or another they are not a “must have” for any arsenal insomuch as they’re an “option”, regardless of what their evangelists might have you believe. Scala fits in here with its wide array of improvements and changes from Java. Rust also belongs here, for the strides it makes in memory safety, as does Golang, for how well it addresses its problem domain. In the end, we can and have lived without them.

Tier I

On the top layer, our icing is comprised of languages whose absence would make the world of computer science unthinkable. Here belongs the game changers and real innovations, which we so often take for granted these days. Tier I hosts C, and also C++. It harbours Java with its JVM. It also hosts JavaScript, for everything it does in the web browser. It also includes assembly, GLSL, and intermediate representations that make everything happen under the hood. Finally, it also bears a graveyard of all the impactful programming languages of times past, such as ALGOL, PASCAL, BASIC, and Lisp (depending on who you ask).

Why?

In recent years, I’ve noticed a very troubling trend surrounding programming languages. Perhaps its just a residual from the greater society, but for whatever reason people have shown an ever stronger pull towards ideology in computer programming. The design of programming languages has shown a stronger pull than almost anything, and when people create programming languages from this standpoint, their ideas become sacred, and well… that’s as far as you can get from science. This is just a hunch, but it might explain why the blog post I stumbled upon has no headspace for problem solving: languages are transforming into a platform for “better ideas”, with community consensus producing “the one proper way to do it”, even though this can never reconcile with reality and actually demonstrates the imperfection of every idea.

People are losing focus on the task at hand, and in an effort to maintain coherency in this tidal wave swamping our industry, I needed to make this to make sense of my job in a way that’s actually useful. Evangelism has no place in science at all, even though oration is crucial for negotiating for science in the outside world (lest we blunder, like the Supercollider). If we can’t keep our heads above the water, we’re as good as quacks whether anybody notices or not.