I spent the last several days in Las Vegas at The Server Side Java Symposium, acting as track chair for the Presentation Tier. That, in and of itself, is a fascinating topic that I'm going to be thinking and writing about over the next couple of weeks. But right now, I want to tell the story of The Smackdown.
Matt Raible approached me to ask if I'd join in on his panel. It was titled "The Web Development Framework Smackdown", and he wanted me involved as the representative of Rails. I wasn't particularly interested when first approached; the format didn't seem informative, and I'm getting bored with arguing about who's abstractions are better. However, I really like Matt, and decided that at the very least, we would entertain some people, and that's a high moral calling. So I agreed.
Let me describe the final group that assembled on the stage:
To quote that most formative of childhood influences, Sesame Street, "Five of these things belong together, five of these things are quite the same. One of these things does not belong here….."
Now, the nature of a smackdown is to be as inflammatory as possible in knocking around your co-panelists and their frameworks. Geert ended up winning, mostly by making jokes about how Europeans are more civilized than Americans. And the panelists were all good natured about it, though the comments could be biting. None of that is very interesting, or important. Nor was the information gleaned as we speakers tried to summarize value positions in twenty-second sound bites. Instead, what fascinated me where the subtexts and accidental discoveries made in the lulls in the shouting.
First, look back at the list and see what is lacking. There was no Grails representative on the panel, even though there were at least two Grails talks on the agenda. Matt has posted that he was unable to get either of the Grails speakers to talk due to time conflicts. But it left a gaping hole in the panel.
So, as I sat thinking about this, one of the panelists asked a question of the audience: what are you actually using? "Aha", I thought, "now we'll get the Grails folks up and shouting." And when we asked about Grails, 2 hands went up. By comparison, when we asked how many folks were developing in Struts 1.0, I would say 50 hands went up. Struts 2.0 and Spring MVC combined for another 50 or so hands. I won't say I was stunned, but at the least taken aback.
This lack of Grails representation left me as the sole representative of a web framework based on a language other than Java. Which is the second major revelation of the evening for me: with all the talk that "Rails has peaked", there I was on stage at TSSJS, surrounded by JSF, Struts, etc. I could not have felt more conspicuous if I'd been painted red - and yet, there is a continued fascination within the Java community with Rails, and I mean specifically Rails, not other web frameworks based on anything other than Java. Think about it: not only was there no Django, or SeaSide, or Merb, or Camping seat on the panel, there also wasn't a PHP or ColdFusion or ASP.NET seat, either. I'm now spending some time trying to decide why Rails and Java seem to occupy close orbits. I'm not convinced that a PHP conference would bother to have a Rails representative working the crowd.
Third, and perhaps most intriguing of all, were the actual slings and arrows sent my way during the panel. I will say that I kept my comments almost entirely to statements of fact about Rails or personal attacks on my fellow panelists (in a good way) and largely stayed out of the attacks on the frameworks. There seemed no point in arguing against any of them individually. I said my peace at the beginning, when I noted that they all shared one thing in common: Java-the-language. This is differentiator enough from Rails that I thought no further argument was necessary. ;-)
However, here, reprinted in their entirety, are the arguments used against Rails.
That's it. Scaling FUD, speed FUD, scaling FUD, and two astonishing accidental admissions. Look first at point number four. "Rails plugins are just little bits of logic." The implication is that Rails plugins are toys because they don't conform to the complexities of the plugin architectures of JSF or Struts or what have you. Have you ever heard a more succinct admission that ceremony matters more than effectiveness?
Now look at point five. I think it was Geert who said it, and I understand his point. If I can be so bold as to restate it, he was implying that the Java world has an enormous supply of libraries laying around that can be harnessed to accomplish great things, and that the Rails community has a much smaller crop of libraries from which to harvest value. And that we are forced, therefore, to reinvent a lot of things already invented in Java.
This point absolutely has merit, as long as you overlook two things:
1) Rails runs on the JVM, via JRuby, right now. And if Java has a library I'm desperate for, I can go get it. 2) When I need to write something, I CAN. Take one example from our recent experience: we decided that Grails offered one important advantage over Rails, and that we could use that feature on a current project. Namely, an auto-injected service layer with automatic transaction demarcation. So, we added it to Rails. In about an hour. And, no, not every framework feature can be created and added to your project in an hour. This is an anecdote. But a powerful one.
At the end of the panel, we all shook hands and agreed that we'd had fun and we went about our ways. I don't know what the audience will have gleaned from the session; perhaps they understand a little better the differences between how JSF and Spring MVC manage state, or how GWT is a Swing-in-a-browser, not MVC at all, or that action frameworks are ideally suited to be RESTful hosts. I know what I learned: Java Web Development frameworks can and do solve a lot of problems for people, but there wasn't anything I learned about them that makes me want to look backwards.