Daniel Sabbah, the general manager of IBM’s Rational division, ticked some people off this week when he said that companies that LAMP tools are “primitive” and that companies that rely on them will have to grow up at some point. Ryan Tomayko blasts the hell out of him, and makes a lot of good points about the state of the art when it comes to building Web applications these days.
I think that the truth lies somewhere in the middle. I think that Sabbah misses his mark when he says that scalability is the issue with LAMP, mainly because people think of scalability in terms of handling many users at once. Where they generally do fall down is scalability in terms of remaining comprehensible when the application gets big and complex.
It’s not impossible to write big, complex applications in PHP, or Perl (or Python, I assume), but they don’t do much in terms of helping you get there. At my job, I work with PHP and Java. When I work with Java, I utilize a number of frameworks that enable me to write a clean, layered application that makes it easy to unit test everything (even Web components) in an automated fashion and reuse my code easily. I use an IDE (Eclipse) that lets me easily navigate and refactor my growing code base very efficiently. Java provides WAR files which enable me to easily package my applications so that all of the libraries that they depend on are included in the application itself, so I don’t run into versioning problems down the road. (I find this to be a huge problem in the Perl and PHP worlds, where libraries are centralized at the OS level in usual practice.)
None of these problems are insurmountable. I am learning more and more about writing layered applications in PHP, and I’ve also implemented a unit testing regime. I know that you can keep all your PEAR modules at the application level if you want to. The truth is, though, that when you do those sorts of things you cut against the grain of the language and customs of the PHP world.
The latest problem I’m running into is figuring out how to deal with transaction isoaltion in PHP. In the world of Java frameworks, much work has gone into making it possible not only to easily deal with database transactions, but to move the level of abstraction up one tier and isolate transactions that may span several databases or systems. Granted, few people need this functionality, but if you do need it, LAMP is probably not going to suit your needs. This, I feel, is what Sabbah was talking about. He just didn’t put it very well.