A Programming Language Endgame
The direction of evolution of current mainstream languages is not clear. The Internet is full of hype-driven bullshit. For example, “future programming languages must have first-class support for AI.” Seriously?!
It happens because programmers often struggle to understand the core idea even in their favourite programming language. If you don’t understand the core idea of one language, how can you see where they all are heading? Here’s a sample of the core ideas of several languages, well-known to me:
- Lisp-like languages – there’s no difference between code and data. Sometimes languages influenced by Lisp adopt a slightly narrower idea. For example, Scala’s idea is to implement a DSL and solve your problem using it.
- C++-like languages – you can always tune the runtime cost of abstraction you’re trying to create. If you really want, you can get a zero-cost abstraction.
- Python – be the second best language for any problem. This is done by being as readable as English prose and by having a lot of freedom from the type system.
- Go – be a perfect fit (in terms of cost of development) for network-based applications.
- Java – sacrifice sanity (in language design, tooling, and so on) in an attempt to do something strategically problematic like “Write once, run anywhere”.
It can take years to get to these core ideas. As you can see, they’re very different. How do we sum them up? The most competent thing I saw on this topic is the article “What next?” by Graydon Hoare. It was written in 2017 and it impressed me so much, I can’t stop thinking about it for 6 years. I 100% agree that:
- We don’t have module systems.
- We don’t have a good solution for error management.
- We don’t have good boundaries between paradigms (sync/async and others).
- We don’t have great type systems.
What do we get instead in mainstream languages? Not much. At best, we get the ability to choose a programming paradigm while using only one language. This is useful when you badly want to use the only language you know. I don’t think it’s a bad direction in language evolution, it’s just not something we really want. We also get more complexity. Sure, we want to solve complex problems, and it sometimes requires sophisticated instruments. But I’ve never seen a person who would prefer a Swiss Army knife to a combination of a good ordinary knife or a good ordinary screwdriver.
Our path is towards simplicity. Die or simplify, that’s the endgame.