Rich Hickey Q&A by Michael Fogus
This sort of thing always used to make me want to start a revolution, but, alas, I always ended up being a 19th Century anarchist among south-sea islanders: harping against dehumanizing factory conditions when everyone else sees the bloody floor as a special kind of comfortable beach, each new IDE plugin as welcome as a pretty girl.
When we drop down to the algorithm level, I think OO can seriously thwart reuse. In particular, the use of objects to represent simple informational data is almost criminal in its generation of per-piece-of-information micro-languages, i.e. the class methods, versus far more powerful, declarative, and generic methods like relational algebra. Inventing a class with its own interface to hold a piece of information is like inventing a new language to write every short story. This is anti-reuse, and, I think, results in an explosion of code in typical OO applications.
Even though I use Scala with all its functional / type-safe possibilities, I’m somewhat trapped by the OO abstractions it makes natural. At my deepest levels of intuition, I’m certain the object oriented paradigm is a dead end. If it didn’t exist, over time, my code would get better and better. And by better, I mean I get more done with less effort in a more readable, debuggable way.