Being a longtime Ruby user, I have naturally dabbled in Ruby on Rails, and I attend the local RoR user group meetings. But if I may confess a secret: I never had that “omg wow” moment that so many new RoR users seem to have. Not coming from a web development background, my reaction was “OK, seems sensible enough, if occasionally overcomplicated”. It made me wonder – if this is the really second-coming of web-frameworks, if it’s truly so much easier than everything that came before, WTF were web developers doing before now?
Recently I started working on a small internal project here at work, which will have a web front-end. And for various reasons it makes the most sense to write that front-end in Java. So I’ve been boning up on the Java web development world.
Holy shit. It’s as if there’s a standards body through which all Java frameworks pass, where a bunch of guys with very thick glasses examine the code and then return it with notes like:
Not Byzantine enough; failed to cause significant mental distress in test subjects; several subjects were able to create working applications in under two weeks. Obfuscate and resubmit.”
Seriously, what the fuck has the Java developer world been smoking for the last five years? Even the newer frameworks touted as “better, faster, simpler” are full of pointless abstraction and tedious XML configuration.
Also, Java frameworks of all kinds suffer from acute noun-itis. It’s like Java people took the idea “everything is an object” from Smalltalk, and then completely misunderstood it. Given free reign, a typical Java developer would probably model a simple apple-buying transaction something like this:
// God forbid we name something after an object in the real world,
// like "AppleTree"
FruitContainer container = FruitContainerFactorFactory
// "getFruit()" would be far too obvious and specific
AppleRepresentationalizer appleRep =
// Can't call it "Person"; what if computers become sentient some day?
HumanLikeEntity buyer = new HumanLikeEntity();
HumanLikeEntity seller = new HumanLikeEntity();
// Frank has an apple.
ObjectRelationship r = new ObjectRelationship(
ObjectRelationship.OWNERSHIP, buyer, appleRep);
// Joe wants to buy the apple.
Intention purchaseIntention = new Intention(
// Begin to contemplate thinking about considering
// planning to actually DO something
Realization rlz = purchaseIntention.realize();
// Joe buys the apple.
See also Why I Hate Frameworks.