Thursday, March 27, 2008

Plato Says Knock You Out

Update: This is not really a blog post. This is really just a gigantic Twitter post. I stand by every word in this post, but only in the context of the frameworks panel at Philly ETech. If you weren't there when that happened, please don't generalize this to the broader universe, as you'll really just be wasting time.

That being said, I think the comment thread on the Ruby Reddit is unusually good.

Watch out - I'm rolling Yegge-style today. I wrote this while waiting for a plane, and I don't have time to edit it properly.

37 Signals recently blogged that we have healthy debate in the Web dev community but we never see it at conferences. They would have been satisfied yesterday. Obie Fernandez spoke as part of a panel at the Philly Emerging Tech for the Enterprise conference yesterday. The panel was billed as a battle of the Web app frameworks, and Obie took the battle part literally. He didn't pull any punches. The panel nearly broke out into a fistfight when people started getting into things like Eclipse vs. vi. When somebody started saying Twitter proves Rails doesn't scale, Obie shouted "That's bullshit!" - in fairness, many people in the audience nearly did the same thing.

Obie kind of came into the session loaded for bear. Here's why I think that was cool.

Plato's Republic introduced the allegory of the Cave to Western philosophy. The Cave is a place where people see shadows cast by faraway objects. People in the Cave imagine these shadows are real. The philosopher is someone who escapes the Cave, discovers the real world outside and all the real things in it, and returns to the Cave to tell everyone what they've learned. The challenge the philosopher faces is explaining real objects to people who only know shadows.

There's an interesting variant on the allegory of the Cave in early science fiction. An explorer stumbles wounded into a lost country where nobody has eyes. The natives restore his health and he falls in love with a local girl and marries her. He enjoys a strange status in his new society, because smells and sounds which everybody else can perceive readily are obscure to him, while at the same time he has access to entire classes of perception which his new community doesn't even have words for. Eventually this causes friction between the explorer and his father-in-law, a powerful man in this blind country, who orders a bunch of doctors to examine the explorer and figure out what to do. The doctors discover freakish orb-like growths in the man's head and realize they have the power to restore order to their society with a simple surgical procedure.

I think I read this variant via Paul Graham originally, but it doesn't really matter. The moral of the story is that you have to be careful when you bring the light of the real world to dwellers inside the Cave, because they're not necessarily going to believe you and they have the ability to seriously rain on your parade. Several people who saw the panel said Obie could have been more diplomatic; that it's a lot easier to say, look, this stuff makes our lives better, it can make your lives better too. From that point of view, picking fights is seriously counterproductive. It's a completely reasonable point of view. But there's another point of view, which says that people who might take your eyes out of your head because your visions disturb them are better kept at arm's length.

At this stage, if you've heard of Rails and you haven't converted, it's entirely possible that you never will. It's also entirely possible that anybody who still isn't even taking Rails seriously by this point might just be some kind of idiot. Certainly, people who meet that profile might not really be the type of people we need to add to our community.

Every programmer should read Fred Brooks' "The Mythical Man-Month." Its primary lesson is that adding new programmers to a late project only makes it later. The corollary is that adding incompetent programmers to a thriving project is unlikely to improve that project in any way. Anybody who still doesn't take Rails seriously in 2008, and still imagines Twitter to have some kind of scaling problem, is probably incompetent to some degree, at least insofar as their Rails-related blind spots are concerned, and therefore probably not likely to become a huge benefit to the Rails community. To put it bluntly, they're doing us a favor by being somewhere else.

Every programmer should also read Chad Fowler's "My Job Went To India" book, where he explains that as larger and larger numbers of programmers adopt a particular skill, that skill becomes more and more a commodity. Rails development becoming a commodity is really not in the economic interest of any Rails developer. This is especially the case because programming skill is very difficult to measure, which - according to the same economics which govern lemons and used-car markets - means that the average price of programmers in any given market is more a reflection of the worst programmers in that market than the best. An influx of programmers drives your rates down, and an influx of incompetent programmers drives your rates way the fuck down.

But this means there's actually a very good use for angry outbursts like Obie's, and for taking a confrontational attitude in general. Incompetent programmers are already too common in the Rails community. Anything which keeps more of them out is a good thing, and telling them to fuck off is a pretty good way to start a conversation with them. It's a pretty good way to end a conversation with them too. It's pretty much the only conversation you need to have with them at all. In 2005 and 2006, anybody who discounted Rails or underestimated it because of its bratty image could be forgiven - but by now people should have realized, unless they're complete fools, that the only way you can stay in business at all with that kind of attitude is by being really fucking good at what you do. That's as true for communities as it is for people, and the prevalance of arrogant, immature rock stars with tons of money in our community is a very different thing than a proliferation of arrogant, immature wannabes with nothing in their pockets would be.

This doesn't necessarily apply to every programmer out there, busy with his or her own work, but it certainly applies to anybody who develops frameworks or writes books about them - and everybody on the panel fit that profile. A certain amount of ignorance about other people's communities is natural, but cultivating that ignorance deliberately is a hostile, prejudicial attitude.

I'm not saying Rails is perfect. That's crazy talk. But to think in 2008 that what was true of Rails in 2005 is still true is just irresponsible and unprofessional, and you don't want to compete with irresponsible and unprofessional people, because the only way to do it is by entering the market for irresponsible and unprofessional services. Those are not the kind of services you want to provide. You only want to compete in a marketplace where skipping your due diligence costs you business. If you alienate developers who don't do their due diligence when developing their opinions, you separate yourself from the segment of the market which they dominate. This is a good idea. The segment of the market dominated by programmers who don't bother with due diligence is the segment of the market which serves employers who don't value due diligence. Those are employers to avoid.

The Web application frameworks ecosystem is infinitely richer today than it was before Rails came on the scene. Rails taught many existing frameworks new tricks and got schooled here and there as well. Anyone who uses Web app frameworks in 2008 has options to choose from, and anybody who develops these frameworks benefits from this combination of competition and collaboration. Closed-mindedness and arrogance on the part of any particular framework's community is detrimental to every framework's community. Attacking it makes perfect sense.

That's why when we got the chance to ask our questions, I asked the most antagonistic, obnoxious question I could think of. ("Is there a difference between frameworks which are old and frameworks which are mature?") Or at least, that's one reason. The other reason: it was fun.