So this post is making the rounds amongst the kids. The gist can be summed up with the graphs:

It seems to me that people building LAMP, Ruby, django, or other applications think of themselves more as building web applications with whatever technology tools they need to use: web services, cron jobs, MySQL, ruby, PHP, python, maybe some Java: whatever. What matters is getting the web application working.

People who using Java see themselves primarily as building Java applications that happen to have a “view” (as we OO head-jobs would call it) that’s the web. Our primary goal is the metaphysical and headless application, not the delivery mechanism. Hopefully you can get a sense for my view of Java culture at this point: it’s more concerned with keeping the concepts, work-flows, and design of the application pure and tidy than optimizing the delivery mechanism, or implementation. Them UML diagrams should look good.

So here is my thing, as a Java developer, I am SQUARELY in BOTH camps here. I am going to give you all my dirty little secret:

I think JSF blows chunks.

I think Seam blows chunks squared.

While I can appreciate the design ideals of component based development on the web, each of these technologies, and especially stacked, represent an abstraction above and beyond what HTTP really is that makes me sick to my stomach to think about. I will freely admit, I am a GWT bigot. Once I saw GWT at JavaOne over a year ago, I had the same gut response I had to Java itself having come from the VC++/DCOM world: this is the way we should have been doing it all along. GWT still encompasses this layer on top of native idea, but does it at the right level. GWT doesn’t pretend HTTP is smarter than it is, it just gives you a “real” and reliable client API. Moreover, you still get to run PMD and FindBugs and have good refactoring support on your code as you develop it. Win. Win. Win.

For all the humor about what “QA” loves in the linked article, I have to say “Techops loves ‘technology tools they need to use: web services, cron jobs, MySQL, ruby, PHP, python, maybe some Java: whatever. ‘” One of the things that makes JRuby and Quercus compelling is getting the WAR deployment story. A “mish mosh” application that has 40 steps to deploy to 25 web servers sucks, and it sucks worse than taking time to QA, because deployment (likely) affects the end user and not the organization.

I am not going to say Java is the End All Be All. However, I am certainly not going to poo poo the Java ethos. Granted the Java Web Dev story has not been perfect, but I will hold it up against anything else out there proudly. Moreover, I will give your circa 2002 Struts app credit for maintainability against anybody’s hand rolled PHP, Perl or whatever else App. Frankly, GWT’s unified asset deployment and deferred binding for native hacks leads me to see it as the best successor to Java in “Web 2.0″ development, but frankly anything is better than where we came from. Even RoR, which I have espoused in this space as a PHP killer over a “Java” killer, represents a step forward in maintainable code in the web tier, but only in conjunction with JRuby. The “Check out a tag from svn to all the servers” deployment method will make Techops AND QA ill, nevermind force you to do some kind of rolling load balancer hack to make it happen smoothly.