I keep seeing comic strips classifying programming languages. They’re unavoidably offensive, because it’s impossible to say anything about a programming language without offending the language’s users. Which makes sense, because you can’t help but get emotionally attached to the thing you’ve been using for years to weave your dreams. It’s also super fun to be hyper-critical about programming languages to the point of innacuracy. All programmers have been wronged by their language of choice or found themselves in the depths of debugging hell with a foreign language. How can you not resonate with criticism reflecting your pain?
Throwing out all that prior consideration and thoughtfulness, here’s my experience with programming languages in no particular order.
What everything compiles to. Unless it’s running on a virtual machine (like the one for Java or Erlang), but even then, every language bottoms out at assembly. The worst experience ever if you don’t have any tooling.
Because web browsers are virtual machines now, so they need their own assembly language.
Super old language. Still used for writing math libraries and physics simulations that must run as fast as possible.
Successor to Fortran. Runs on damn near everything. It’s what wrote the code for the microprocessors in your car, airplane and your hearing aid.
Business successor to C. Runs most of the world’s banking, insurance and accounting software on hardware. Makes you throw out everything you thought you knew about computers, which means consultants who write this language make tons of money.
Successor to C allowing for Object Oriented Programming and templates. The foundation for many essential systems.
Let’s people define their own domain specific languages. In theory, extremely powerful. In practice, makes reading someone else’s code extremely painful. I don’t trust anyone’s opinion on it, unless they’ve also written a large program in OCaml.
One of the original functional languages. Some people at Facebook are so excited about it, they’re using it for everything.
Saw the code people were writing in C/C++ and decided to make it easier to write parallel code without breaking things. Equivalent to sun breaking through the clouds after 40 days of rain for many C++ systems developers.
An alternative to C and Rust, created by a person so convinced they could make a better alternative, that they quite their job and live off donations.
Saw the code people were writing in C/C++ and tried to bring them closer to Smalltalk. Also, wanted to stop people doing evil things like redifining False to 1. Now synonymous with boring business systems and obtuse descriptions of simple concepts.
Google’s alternative to Java and C++. Compiles fast and runs fast, while maintaining utter contempt for developper’s ability to learn new skills.
First programming language of many elder programmers because it shipped with a bunch of old computer systems and it was easy to modify games with it.
Seymour Papert’s attempt at a language for children.
Alan Kay’s attempt at a language for children.
Academia’s attempt at an evidence-based language for everyone.
When functional programming people have to work with Java people.
When LISP people have to work with Java people.
Microsoft’s response to Java and C++. Jeff Atwood loves it.
Apple’s response to C++. No one loves it.
Apple’s apology for Objective-C.
Jetbrain’s apology for Google making everyone write Android apps using Java.
Microsoft’s idea of a high level scripting language. Mostly found in Excel macros. Visual Basic 6 came with a delightful IDE that allowed you to make windows-looking apps in seconds. It died…
The language for lovers of pure functions and complicated types. Writing it feels like doing math.
Haskell, but for building Web pages, instead of proving theorems.
Microsoft’s idea of a functional language.
Wait, this is Haskell for building web pages? Ugh, whatever. The language that helped me “get”
The original engineering/science language. Unparalleled at creating systems I have no experience with. Horrible for creating a bunch of systems I do have experience with. A bunch of tools are written in this, so it’s still used today in various fields. Great for starting language wars between scientists.
The language scientists should be using today. Fast, understandable and debuggable. The community used to be filled with jerks, but have calmed down now and are very friendly.
A refined Matlab I’ve never used.
Supposed to be a higher level alternative to C. Mostly extinct, but lives on embedded in various applications. Last time I saw it was the testing scripts of a telecom company.
Wanted an expressive way to do things quickly, but ended up ugly as hell. There’s a new version, but I don’t trust it.
Designed to help C programmers make web pages. Has slowly gotten better over the years, but still hurts my eyes.
An attempt to put typing into PHP by Facebook to make it faster. Hated by many.
Keeps popping up where I don’t expect it, like Game Dev and Deep Learning, since it’s an easily embeddable language. Has a JIT so beautiful it makes readers weep.
Used by telecom companies and people with super hardcore distributed systems to maintain. Where the Actor model of concurrency comes from.
Syntactic sugar taken to its conceptual extreme. Adored by the Japanese. Has this thing called meta-programming, which I’ve never had a need to use, but allowed for the creation of Ruby on Rails which people still swear by for creating websites that need to access and modify a database.
Statically typed, compiled language for Ruby programmers. Because making Ruby fast is so difficult, you sometimes need to write a whole new language.
Created by a Ruby-lover who wanted to use Erlang’s BEAM VM with a modern functional language. The new hotest language for building a website.
Decided from the beginning to be as understandable as possible. Consequently, has libraries for damn near everything (Deep Learning, scientific computation, statistics, making visual novels… etc). People like to argue about v2 vs. v3, but it’s never been a problem for me.
Statically typed, compiled language for Python programmers. Because making Python fast is so difficult, you sometimes need to write a whole new language.
A language designed for statisticians. Great for starting fights between stats nerds by comparing it to smoking.
The only thing running on the Web for years now, so people have been working really hard to nurture it from its awkward beginnings into a mature language. They have seen moderate success in this endeavour over the last few years. Has started running on servers too, because people hate having to know two languages.
Glues a bunch of shell tools together. Occasionally abused to create large-scale programs.
An object oriented and API-focused shell language from Microsoft. Mainly praised/derided for not being Bash.
Some next-level systems design language I don’t understand how to use properly. Tried working through Hillel’s book about it, but got lost. I would someday like to learn how it’s related to Alloy.
Language for automating tasks using keyboard shortcuts on Windows. No equivalent on Linux, because the Windows Manager ecosystem is too fragmented.
Neo-reactionary language that lets you turn political enemies into unpersons.
Nobody can agree on what makes a language “embeddable”. Also, embedding a programming language is a different problem than programming an embedded system.
The trade-off between compiled and interpreted languages is constantly fluctuating
It’s pretty funny/sad how everyone keeps trying to get away from C++ and it keeps dragging them back. To its credit, the language does keep updating, but it’s similar how an amorphous ooze monster absorbing another house is an update.
No one is sure what programming language to teach first, but it probably isn’t C/C++ or Java given this research.
Everyone is trying to make their language easier to visualize. Turns out, it’s super hard. A lot of people think it requires designing totally new languages/interfaces. For an overview of these attempts, see this overview.
The biggest leaps in languages come from taking ideas from extensive research. This is really hard to do correctly. Look at this blog post summarizing cool things around the corner for more info.