In a prior post, I shared a quote from Chelsea Troy comparing expressiveness vs interpretability in programming languages. I thought it would be interesting to get ChatGPT to categorize other languages based on this measure.
- Emphasis on expressiveness: Prolog (1972), Perl (1987), Lua (1993), JavaScript (1995), PHP (1995), Ruby (1995)
- Emphasis on interpretability: COBOL (1959), Python (1991), Go (2009)
- Both expressiveness and interpretability: Haskell (1990), OCaml (1996), Erlang (1998), Scala (2004), F# (2005), Elixir (2011), Rust (2010), Swift (2014)
- Less expressive and less interpretable: Fortran(1957), C (1972), C++ (1985), Java (1995), Kotlin (2011), Zig (2015)
Learn at least a half dozen programming languages. Include one language that emphasizes class abstractions (like Java or C++), one that emphasizes functional abstraction (like Lisp or ML or Haskell), one that supports syntactic abstraction (like Lisp), one that supports declarative specifications (like Prolog or C++ templates), and one that emphasizes parallelism (like Clojure or Go).
How do we explore? If you move to a new city, you might learn the territory by walking around. Or you might peruse a map. But far more effective than either is both together — a street-level experience with higher-level guidance.
Likewise, the most powerful way to gain insight into a system is by moving between levels of abstraction. Many designers do this instinctively. But it’s easy to get stuck on the ground, experiencing concrete systems with no higher-level view. It’s also easy to get stuck in the clouds, working entirely with abstract equations or aggregate statistics.