Cedric had a tweet last week about how Scala is poised to take over the world, just not this year. It was a link to another dude. It is here I bit and found, through his post, that I really did not know that much about Scala. I had heard it was a functional language, which generally makes my brain turn off immediately. People who just could never get their heads around objects are helming the Viking ship back to the frozen land of procedural goo. How exciting. Procedures are out of gas at ~50K LOC and I am quite happy with OO, though, like, um everything, it‘s not perfect.
What the above post made me realize is that Scala is actually a multi-paradigm language. Having been a huge fan of James Coplien's book Advanced C++ I only discovered his book on multi paradigm C++ a few years ago and I really enjoyed it. Multi-paradigm is not a retro reassertion of grumpy nerd stupidity like 'functional' (read: procedural) is. In fact, one of the paradigms that is part of the 'multi' moniker is one of my favorites: agent-based programming. I predict that Agents will end up dominating designs in the coming years. The rise of Hadoop has shown that interop scenarios in the cloud are wide open. For my tastes, Hadoop is too data-oriented. The beautiful part about agents is that they will not fall into this trap, and hence, I think they will offer a better means of achieving reuse in cloud-interop (another post).
Now, having poked my head into the Scala tent, I did see a lot of things I thought were great, e.g. Traits. I will have to look some more though, because what I saw so far seemed to indicate that there were some well-meaning people trying to rectify language wrongs of the past (e.g. multiple inheritance), but that maybe some of the ways of doing so would not be really appealing to me long term. I definitely buy one of the article‘s core arguments though: the community, and happened to have blogged about that not long ago, saying how the C++ community of yore was more serious and engaging than the Java community. I think ultimately, internecine stupidity is high on the list of flesh eating bacterial cultures that threaten Java. Which brings me to my last language musing: I looked a bit at Ceylon and thought I was missing something the whole time. It seemed to me like it had inadequate heft to warrant a new language, and that it‘s chosen targets were all things that could be easily improved in the existing one. The war that broke out between Gavin and the Scala guys was amazing though. Seriously, don‘t these people have anything better to do? Gavin‘s characterization of it as pig wrestling was an insult to swine.
Actually, one final thought: I had my mind blown by the E. T. Jaynes book on Probability a few years ago. To me, the biggest problem with languages today is insufficient accounting for indeterminacy and its role in complexity. Is that too vague? Every language on earth right now requires that each attribute of each thing be known before it might be manipulated. This has served adequately (though painfully) the Age of Simple Simulations, but that age is ending now. What are you working on? A site that stores resumes? one that lets people chat? that shows the price of a stock? borrrrrrrrriinnnnnnng. These are all facile simulations of things that already exist in the world. Applications are going to have to incorporate the abilities to learn and reason. And doing so with fixed attribute mappings, be they db (SQL), static (C-family) or dynamic (Smalltalk et al), is going to require some fundamental rethinking..