We have all learned functional programming in Haskell, but there are more functional languages like Lisp, Scheme, ML, and Clean.
Why should we even bother to look further than Haskell?
- You want your programs to run faster. - Monads drive you mad (what are they anyway? warm fuzzy things?). - You need objects. - You sometimes need a more powerful module system.
The solution to BlubParadox is simple: writing lots of simple code only tires you physically, your mind is at rest and you're in some trance state which is enjoyable. writing smarter,more abstract code tires the mind and stops any trance/flow but minimizes effort to code. probably a middle ground is to write a code that doesn't force you to think of very complex ideas, and is compact enough to not tire you physically. Object-oriented design with information hiding allows to operate on black box interfaces, which can be arbitrary complex structures. So essentially OO-Blub is both simple to think of(intuitive interface) and fast to write(using a black box). What "non-Blub superior languages" fail at is that they provide very rich, possibly arcane tools and expect the programmers(the average programmer is not a genius) to think hard how to use a tool. To add to injury syntax which needs more mental effort slows down the programmer. The code becomes mentally hard to write and interpret, the advantage of it being compact is viewed as a black box interface. Except not a Blub black box, an unconventional hard-to-modify piece of code without a OO interface to large piece of simple code. Blub wins adherent by being simple to learn, modify and create abstractions. It doesn't have anything really "hard" and "complex" but that works to Blub advantage: it makes far easier to parse, compile and modify Blub than the "superior language". Some things can't be expressed in Blub they say. When someone actually expresses the things, they're inelegant. When made elegant they're called unsafe and ugly on the inside. Blub rarely needs to express the things, it doesn't need to emulate lambda-calculus to solve problems of its domain. The things hard to express in Blub are with rare exception heavily abstract representations of academic ideas. Blub is not fundamentally crippled because it lacks these things: when Blub will need it it can linked from a module or library outside Blub.