I’m guessing because of their need to dethrone Scala as the Java-killer, the copy for this latest round of mainstream language wannabes – Ceylon, Kotlin, Fantom, etc. – has included an absurd amount of anti-intellectualism.
Since Scala is designed by a famous researcher (nevermind the fact that Odersky was also responsible for Java generics and the freakin’ Java compiler!), the goto criticism by those pushing languages that are still in their infancy is that Scala is too “academic”, “ivory-tower”, etc. Nevermind the fact that this isn’t true, it belies a disturbing unwillingness to learn. This is counter-intuitive in that we are talking about software developers here. These are supposed to be tech-savvy, curious, early-adopters.
The rhetoric in some of the press-releases/blog-posts about these new languages is absurd. I’m going to pick on Fantom because I just was reading an article about it when this outrageous paragraph prompted me to post:
Fantom is a language developed for software engineers by software engineers. We didn’t create Fantom as an academic experiment to publish research papers. We take pride in the fact that Fantom is a “boring language” — a workhorse, everyday language to build large software systems. Fantom is easy to learn and bundled with all the tools a typical project needs…
I mean, damn, throw in a couple references to “cheesy grits” and this language could be running for president! Fantom is a good, honest hardworking language. Not one of those uppity, fancy-pants languages.
I agree there is something to the idea that simple tasks require simple solutions, and that you can’t expect experienced programmers to throw out everything they know when trying to learn a new language for production (spare-time languages are another story entirely). That’s why I like the functional/OO hybrid provided by Scala – it allows for a continuum of use. I similarly get annoyed when someone asks a simple question on, say, the Scala mailing list, and is met with many references to comonads (though this represents a tiny minority of mailing list activity – nearly everyone there is awesomely helpful).
However, the idea is to provide a language that gives developers the tools to write better software, along with a smooth “upgrade” path – not to abandon all these unfamiliar (read: statically typed and functional) features entirely in the name of familiarity. “Easy to learn” is just another way to say “business as usual.” And having written a fairly gimungous amount of “enterprise software”, I can say that “business as usual” definitely does not cut it. Maybe I’m just doing it wrong, but the amount of time spent wrestling with the paradigm when writing OO software is just absurd – at least half of the patterns in the GOF book have a simpler name: “higher order function.”
In conclusion: I applaud the Scalas and C#’s of the world, whose enthusiastic embrace of the functional paradigm has done more for my understanding of how to write good software than a thousand pattern books to the face.
PS. I don’t know if anyone else has followed the series of Ceylon blog posts by Gavin King, but I get the sense that even though he started in the anti-intellectual camp, the process of designing the language has slowly been pushing him over into serious language-geek territory. The language that started out by critcizing the “ivory tower” syntax for function calls in languages like Haskell and ML is now probably going to include such arcana as intersection types. I love it! Additionally, I used to think the language seemed dumb but now I think the combination of untagged union types, intersection types, and variadic generics could lead to a really interesting language. I’m excited to see how it turns out and I recommend those blog posts for anyone interested in a smart guy’s exploration of the insanity of F-sub.