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
.getInstance().getInstance().get(FruitContainer.ARBOREAL);
FruitGetterFromAppleContainer getter(container);
// "getFruit()" would be far too obvious and specific
AppleRepresentationalizer appleRep =
(AppleRepresentationalizer)getter.doGetAction();
// 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(
Intention.PURCHASE_GOODS, appleRep);
buyer.addIntention(purchaseIntention);
// Begin to contemplate thinking about considering
// planning to actually DO something
Realization rlz = purchaseIntention.realize();
// Joe buys the apple.
rlz.instantiate();
See also Why I Hate Frameworks.
Even…
… though I’m way out of my league here.. I still find this hilarious..
Maybe it’s a good thing I didn’t become a programmer and only play with things like html and perl at very very low levels…
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.”
This made me snarf my glass of wine.
Seriously, this post is great. Someone should Digg it. I would, if I did that sort of thing.
Oh, this isn’t the half of it. The Microsoft folks have it just as bad, possibly worse, in .NET and C-sharp.
Ruby is a good thing.
Actually? No. While I’ve not built any C# applications, I’ve spent some time going through the literature recently, and C# gets a lot of this stuff RIGHT, where Java is just completely braindead. For instance, C#’s “Delegators”, and all the syntax shortcuts that accompany them, mean that you can effectively use simple lambda expressions in C# where you would have to construct an anonymous inner class in Java.
C# even has limited type inferencing, for goodness’ sake. All in all, it gives the impression of a language that was created by an honest-to-god language designer. Which is not surprising, since the guy who created it is a big shot in the Haskell community.
I haven’t seen the same proliferation of web frameworks in .NET either; but that MAY just be a function of it’s relative youth.
I’m the first to point out MS’ mistakes and idiocies, but I’ve been saying for years now that .NET and C# are one of the few things they’ve gotten right since Excel. They even managed to get Sun to grudgingly rush out a major Java update (Java 5) when it became clear that C# was giving developers everything they had been begging Sun for (Generics, real Enums, metadata, etc.) for years.
PS Sorry if my tone came off as sharp in the previous reply. I just get so irritated with Sun and the culture of programmer stupidity (referring to the people who create these frameworks) that they have spawned. I mean, how lame do you have to be to have Microsoft kick your ass on technical merits?
My pique is with them, not you.
Truth is he’s a nerd at heart masquerading around as a geek. Notice how he started off his response with “Actually”?!?
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.”
What’s so screwed up about this, is that you’re dead serious–I’ve had the same experience. Learning Java must’ve invoked a couple thousand microhemorrhages in my brain before I finally gave it up.
This is so so true. Perfect.
It’s like Java people took the idea “everything is an object” from Smalltalk, and then completely misunderstood it
And maybe this finally explains why!