PHP victory over Ruby: was Gosling right?
Project failure 2.0
Remember when Java father James Gosling got flamed for uttering the ultimate Web 2.0 heresy: scripting languages aren't good enough for enterprises?
The world's second favourite Canadian was taken down a notch or two for the thought crime of "not getting it". A year and a half later, and a user case study has popped up that supplies a nuanced twist to the debate.
Derek Sivers, a musician and online entrepreneur, found fame this week by telling the community he's cancelling a seemingly simple project to re-write his CD Baby site in Ruby on Rails after two years, and is sticking with the existing PHP language.
In the old world, we'd call that a project failure. Now all the rules are changed, though, it's probably been rebranded as something a little less negative to help downplay the wasted time, effort and money, and lost business.
What went wrong?
Despite hiring Jeremy Kemper, who is considered one of the industry's most capable Rails developers, and making good initial progress, Sivers found Rails too prescriptive.
"Jeremy could not have been more amazing, twisting the deep inner guts of Rails to make do things it was never intended to do," he said.
"But at every step, it seemed our needs clashed with Rails' preferences (like trying to turn a train into a boat. It's do-able with a lot of glue. But it's damn hard. And certainly makes you ask why you're really doing this.)"
Sivers has published seven reasons why he switched back to PHP. You can read them here.
Sivers runs a small shop, but his pain will strike a note with companies of all sizes and should serve as an object lesson in careful project evaluation.
Was it the technology - the immaturity or the complexity of the language, or the restrictions and inflexibility of the Rails framework? Maybe it was the classic customer error - picking the wrong technology for the wrong project, even though Ruby on Rails are - theoretically - at home building rich internet applications and interfaces. Or was the supplier at fault: did Kemper lack the technology and management skills for the project at hand?
Sivers's story is familiar to any enterprise IT project that's running late and over budget, and a lesson for developers being deafened by the noise on scripting.
Who thought a Canadian might be right?®
Scripting languages don't scale
It's been rightfully pointed out that Gosling's quote had nothing to do with the meat of the article...But I do agree with it. Although I would substitute "scripting languages" with "weakly typed languages." IMHO, It's very difficult to write a scalable app when the principles of object orientation can be thrown out the window either on purpose or by accident. I did Perl in the CGI days, moved to PHP for all the same reasons everybody else did, used ASP.NET for a couple contracts and fell in love, and was more recently forced into Flex + J2EE. For small projects PHP rocks, but when you're writing a large app that has lots of reusable parts, I can't shake the feeling that I'm writing a bunch of "throwaway code." I'll take ASP.NET for scalability any day.
No matter how smart and flexible a framework or platform is, you're going to have serious problems if you try to make it do something it wasn't intended to do. Whether it's rails, smarty, or sharepoint, you have to evaluate how close of a match your project is to what the framework does. Even if it's a 90% match, that 10% might be painful enough to make it well worth writing something from scratch.
What the customer asks for isn't what he wants
We see customers destroying perfectly working software packages with this kind of project mentality. "Give us your package with all these features.... but make it work just like the system we already have". Sounds like he did the same thing. Lets change languages and database platforms (why not the operating system too eh?) but make it do exactly what the existing system does please. As someone else pointed out, having the guru developer on the project just meant he wanted to solve the little problems in detail. He needed to hire (and listen to) a project manager and application designer who would push back earlier and design new applications to make use of the new features and framework. Ruby scales fine with clustered servers too. There are a number of large sites out there using it.
Amazon at least used to be written in C++.
There are also a few websites running on other fast, natively-compilable languages, like Erlang and Common Lisp. Expect Erlang sites, at least, to become far more common in the near future.
And speed is by no means irrelevant, even in this age of Web 2.0. Ruby on Rails is quite nice, but slow and awkward to deploy.
PHP is just a plain horrible language. It is IMPROVING, but it still doesn't have proper Unicode support, for instance; of course, neither does Ruby.