Complexity is in the Eye of the Beholder

I just read through David Pollak's blog Yes, Virginia, Scala is hard. Now David has much more contact with developers in the trenches than I do, but I was a bit perturbed by his perspective.

He doesn't paint a pretty picture of the “center-of-the-mean” company. He has unkind comments about people with a 9-to-5 work week or people who don't know Zed Shaw. Now I would like to have a 9-to-5 work week, and I think I could get there if I wasn't frittering my time away writing blogs.  And I had to Google for Zed Shaw to realize that he is the one who writes those “Learn X the hard way” books. (I glanced at a couple—I am not crazy about the Ruby one...way too chatty...but the C book has some really good ideas.)

It may well be that the “center-of-the-mean” company prefers to use a language that makes the easy things easy, like Cobol or Java-together-with-a-bunch-of-point-and-click-tools. It's always been like that. Not so many years ago, I was stunned to find out that more people programmed in Visual Basic than in C++ and Java together. Now, Visual Basic isn't looking so hot, and its annointed successor, C#, is getting to be way more complex than Java, so we'll see where that's headed.

I used to love C++. I used to come up with ever more elaborate uses of templates and smart pointers in C++, and had a low opinion of programmers who used C++ as “C with cout instead of printf”. Then I ditched the whole thing and moved to Java. Now, when I look how C++ is used, it's advanced a bit. People do use classes, like in Java, and they use simple templates. But most of real life C++ stays away from the complex features. That is actually very reasonable. Not every C++ programmer has to be a template guru. Not every Java programmer has to grok wildcards. Not every Ruby programmer has to understand metaprogramming. Not every Scala programmer has to comprehend higher-kinded types.

The C++ programmers have made peace with this state of affairs. A few wizards produce libraries that every one else uses. Most Ruby programmers never knew it any other way. Rails provides the framework, and one follows its one true way. So why this hangup about Scala complexity? What's wrong about using the easy parts and letting the experts worry about the hard parts? By the way, David  is the first to point out that Scala is easier than Java when you stick to the plain OO features.

What's the alternative? Just use Java? We all know it doesn't have enough mojo. Add IDE code generation, XML configuration, dependency injection, annotations. Now we are talking. Ok, but how simple is that?

Use Ruby/Groovy/JavaScript? How cheerful is it if just about everything is a hash map and all your errors are found at runtime?

David has this list of bullets:

In the end, Scala will win if it gives programmers what Java, Ruby, or Lua gave them—a better way to do their job. People loved Java because it didn't make them deallocate memory, and because it let them put up a GUI and connect to a database. People love Ruby because of Rails. Ok, I don't know why people love Lua, but TIOBE tells me they do. If you love Scala, go and write that framework or library that makes them love it too.