On "subsetting"

A quote, with some good insights about the evolution of (programming) languages

If we were to follow Rich Hickey's advice, we'd only ever accrete our APIs, never removing old functions, never reducing API surface area. Then we subset to the good parts. But if we only ever grow-then-subset, when do we get a chance to "really fix things" and remove all the old cruft? How long must we wait?
The answer is: until the revolution when we build the next language. And this happens all the time. In each case, it's an expression of the idea that "feature X was never really necessary".
  • Lisp dropped the idea that computing is about submitting sequential instructions to a Von Neumann Machine.
  • Erlang dropped single-machine-single-core thinking.
  • The scripting languages of the 90s dropped strict typing.
  • Javascript dropped Java-style OO.
  • Elm dropped Haskell's typeclasses and some elements of syntax.
  • Go dropped OO entirely, exceptions, and union types.
  • Clojure dropped CLOS, mutability, and the centrality of cons cells.
  • Rust dropped the IO Monad and null.
No programming language will last forever, so I don't think we should hold on to our favourites with too tight a grip. We grow them until we can't, and then instead of "just make a new namespace" as Rich would say, we make a new language entirely.

We build a new world and live there until we no longer understand it.

The original article has another interesting twist, about "subsetting your life", read on!