RC W4D1 - Expressiveness vs interpretability in programming languages

My time at RC this batch has largely been exploring functional languages. With Haskell, it’s fascinating to see how lazy evaluation introduces a different paradigm. With Idris, it’s intriguing to see types as first class citizens.

We had a group viewing of the talk on Verse by Simon Peyton-Jones yesterday. I didn't quite follow where the gaps in existing languages for what Epic Games is trying to do resulted in the the choices they made - functional logic language, declarative, lenient evaluation, static types, effect system. The main thing I came away with was confirmation that I should look into Prolog.

More generally, what I haven’t been able to put into words is how a language 'looks'. I remember trying out Ruby (likely for Rails) but the syntax didn't quite feel as 'natural' to me. Python felt more concise, and the ‘one way to do things’ philosophy translated naturally when I was picking up Go. Haskell looks even less familiar, perhaps here the different paradigm element keeps it separate vs comparing against imperative languages.

Learning compilers helped me think of languages as more similar to each other than different (especially now with Haskell at one end of the spectrum). Chelsea Troy summed up the Ruby vs Python difference in this post.

Ruby values expressiveness over interpretability: the artful Rubyist can construct code that reads more or less like an English sentence. Indeed, that was the intent of that language’s design. When this happens, it’s gorgeous to see. However, the inexperienced (or malevolent) Rubyist can construct code that works fine, but is utterly unintelligible.

Python values interpretability over expressiveness: the authors strive for there to be only one way to write something.

To clarify, I'm not saying it's a good or bad, just different. I’ll be sure to bring this up at coffee chats to get a better perspective.