I found this talk incredibly insightful, especially for crystalizing the reasons why more expressive power is not necessarily better.
https://en.wikipedia.org/wiki/Shriram_Krishnamurthi who is giving the talk is one of the authors of the Racket programming language and toolchain. He talks about a paper by https://en.wikipedia.org/wiki/Matthias_Felleisen, who is the head of the Racket team and the author of different Scheme books, which is available e.g. from https://jgbm.github.io/eecs762f19/papers/felleisen.pdf (1991). You could directly read the paper, but the lecture is surely more entertaining. Essentially, it is advertising for Scheme and Racket.
As a programming language designer, I have been deeply influenced by Scheme, and have been following it for a while. When Scheme added call-with-current-continuation, I initially thought it was cool (more expressive power), but then I decided it was a bad idea, because it has difficult non-local semantics that severely impair your ability to understand what a program is doing. This lecture gave me a vocabulary and theoretical basis for articulating my distaste for features with non-local semantics that improve expressive power at the cost making programs hard to understand. Scheme is no longer my favourite language, and I can point to this video when explaining why.
It’s important to watch the Q&A section, because there are important insights there. After 56:00, he says:
“We need to talk about what it means to make things more expressive for the human, but do we realize that in the process of adding that, we might have actually made things unexpressive or unintuitive for them, by destroying things that they might have expected.”
After learning Haskell, I added shared mutable state to my list of features that add a certain kind of expressiveness at the cost of destroying important guarantees and making programs harder to understand. Rich Hickey’s “Simple Made Easy” lecture* is another deep dive into the problems of shared mutable state, and other sources of complexity. (Haskell has deeply influenced me as well, but it too is not my favourite language.)
I decided it was a bad idea
I decided it was a bad idea
Others agree with you.
That’s an awesome link. Very fluent and well argued. Thanks!
As with everything, you need the right balance. In my view, Scheme has been overdone in the other direction than, for example, C++. Scheme is from my view “programming on logical atomic level”. It is on the one hand (at least from a logical mathematical perspective) very expressive, but nevertheless not necessarily easy to use. Personally, I try to find the right measure between simplicity and power with Oberon+ (by somewhat extending Wirth’s approach, which is too minimalistic in my view). I used to work with Common List long ago and also looked at ML and Haskell. But that is a different world than mine today.