This post originated from an RSS feed registered with Ruby Buzz
by David Heinemeier Hansson.
Original Post: Distinguishing power from versatility
Feed Title: Loud Thinking
Feed URL: http://feeds.feedburner.com/LoudThinking
Feed Description: All about the full-stack, web-framework Rails for Ruby and on putting it to good effect with Basecamp
I think I've distilled what made my eyebrows go up at Goslings comments about PHP and Ruby. Aside from the fact that he confuses Ruby with Rails and uses the dismissive term "web pages" instead of "web applications", I think the primary mistake was abbreviating "the power of versatility" into just "power".
Power has connotations of how well a specific task can be done. If two tools are aimed at exactly the same scope, the one with more power is usually preferable. But that's really not the kind of power Gosling is taking about. He's talking about the power of versatility. Being able to use the same tool to do every imaginable task.
That's the kind of power I do not envy. At least not for Rails nor PHP (general purpose languages, like Ruby, is a different matter). The greater the versatility, the higher the abstraction, the less useful for the specifics. Saying you'll be everything to everyone, from "web presentations" to "interplanetary navigation" as Gosling puts it, is not free. You have to give up other desirable attributes to get that.
Which is fine, of course. If your model of the world is that you're stranded on a dessert island and you can only bring one tool. Or if your model of programmers are that they're too busy/uninterested/dumb to to ever learn more than one platform.
In any case, I'm more at peace with Goslings discussion about power now that I understand he's really talking about the power of versatility. As long as you replace the word Ruby with Rails in his mutterings, he's actually right. Rails achieves great power, productivity, and programmer happiness by trading in the option to "interplanetary navigation".
At the same, the conclusion must be that if a) don't believe the two world models listed above (that you can have only one tool) and b) that you have modest needs, say the intent to build a web application for e-commerce, communities, collaboration, etc, and not "interplanetary navigation", why would you not choose to go with the more specific tool? If you don't desire versatility for the task at hand, wouldn't you rather trade it in for simplicity, productivity, and programmer happiness?