There were several posts lately critical of Scala language, specifically this one http://java.dzone.com/articles/i-dont-scala.
It is a well written, critical of Scala post by someone who clearly prefers other languages (i.e. Java) at this point.
However, having used Scala exclusively for the last 4 years and having led the company (GridGain Systems) that has been one of the pioneers in Scala adoption boasting one of the largest production code based in Scala across many projects – I can see all too familiar “reasoning” in that post…
The biggest issue with Scala’s perception is the deeply varying quality of frameworks and tools that significantly affect one’s perception of the Scala language itself.
I’ve been saying openly that SBT and Scalaz projects, for example, have had the cumulatively negative impact on Scala’s initial adoption. While poor engineering behind SBT and colossal snobbism of Scalaz have been well understood – I can add Spray.io to this list as well now. The engineering ineptitude of people behind Spray.io (and the Spray.routing specifically) is worrisome to say the least.
When someone takes a test run with Scala and gets exposed to SBT, Scalaz and Spray.io – on top of the existing growing pains of binary compatibly, IDE support and slow compilation – I’m surprised we have even that small community around Scala as it is today.
Yet – remove these engineering warts – and Scala provides brilliantly simple, extremely productive and intellectually sutisfying world in which we can express our algorithms. What attracted me the most to Scala almost 5 years ago is its engineering pragmatisms vs. hopeless academic idealism of Haskell or intellectual laziness of dynamically typed languages. That engineering pragmatism coupled with an almost algebraic elegance and simplicity is what makes Scala probably the best general purpose language available today.
So, I say to my engineers to look at Scala holistically, away from sub-standard projects, tools and individual snobs. There are plenty of good examples in Scala eco-system where one can learn how to think and ultimately write quality code in Scala:
- For sane type-level programming look at latest Scala collections (although bad design overall…)
- For DSL look at ScalaTest
- For concurrency look at Akka
- For boundary pushing yet still useful type-level programming look at Shapeless
and the list can go on.
When tinkering with Scala for the first time always remember that Scala the language is much bigger than the sum of many of its projects – and there are few of them that you probably should stay clear off altogether.