
And this is where I think Haskell has it all over C++, Java, and the rest. Haskell is easy to learn at a simple level, and hard to learn at the expert level, but once learned is very powerful and has excellent payoffs in terms of productivity. With C++ or Java, the expertise is somewhat easier to acquire, but you never get the payoff.
That may be true of Java, but it's not of C++. C++'s language specification is so big, it's almost too big to fit in one person's brain. It takes many years of studied confusion and a particularly anal frame of mind to work out what it, and what isn't, legal. And to top it off, it has a small pattern-matching pure-functional language with type classes built in that only runs at compile time. And that's before you get started on learning the various modern idioms you need to learn to stop C++ from burning you on the arse.
And before you all flame, yes, I do know C++ at an expert level, and that is exactly why, after 7 years of writing server software in C++, I now want to do it in Haskell.
Me too, which is why I find your statement that expertise in C++ is easy to acquire. Seeing some of my colleagues' code is enough to tell me that this is most definitely not the case. Martin