Common Java Cookbook: Drupal FTW
This is something of a coup. For countless years I avoided PHP like it was a disease. I viewed it as a half-language. The implementation technology one would use as a last resort. "You program in PHP?" "Surely, you jest."
Admit it. If you earn a living writing Java or .NET (or even Python or Ruby), you've had the same reaction. Well my days of PHP bigotry are over, and Drupal has won me over. It won me over because it integrates with *everything*. Everything. It really does make you appreciate the Internet as an "Operating System". Don't host comments, integrate with one of many comment providers. Don't host video, integrate with one of many video providers.
Let's take the web site you are looking at right now as an example. What does this Drupal site interoperate with, out of the box? What external services do I get by just downloading and installing a high-quality modules from the Drupal site?
- Constant Contact - Opt-in Email lists
- XML Sitemap - Drupal can automagically publish and update the sitemap.xml.
- Google Website Optimizer - Instead of me having to figure out how to put the A/B testing Javascript into my site, Drupal can do it for me.
- Chartbeat - For immediate stats, because Google Analytics can't tell me "how many people are looking at the site, right now".
- Google Analytics
- GetSatisfaction - To handle feedback and questions on an open customer service platform.
- Syntax Highlighter - All of the book's code listings are highlighted using this Javascript and a Drupal filter.
- Facebook Connect - Because it was there. No one can afford to ignore Facebook.
- OpenID
- Wordpress Import - Importing my old blog was brainlessly easy.
- YouTube
- Vimeo
- blip.tv
- Disqus - Hosting comments and dealing with spam is that last thing I want to spend my time on.
- Feedburner - Google's Feedburner is a good third-party URL for syndication. If you migrate between different technologies every few years, it is good to have an RSS feed that stays put.
- Google Custom Search Engine
- reCAPTCHA - I've seen too many problems from people hosting custom CAPTCHA forms, they never quite work right. reCAPTCHA makes this someone else's problem.
And, for each of the items on this list there are maybe four or five other respectable options. Four or five other analytics options, four or five other ways to host mailing lists, etc. The variety and quality of Drupal modules is the deciding factor.
Sure, you could easily implement each of these integrations with some simple Javascript or maybe using some custom templating language. Each integration, with the exception of Facebook and OpenID isn't particularly difficult. In each case, I could have written some code to integrate, but I didn't want to reinvent the wheel. In most cases, you are talking about a simple snippet of Javascript or some template that needs to follow a template for an embedding code (like YouTube or Vimeo). But, if you dig deeper into each of these Drupal modules, you'll quickly realize that each one has a tiny community behind it. Each module is well supported by a community of people that depend on it.
This is the benefit of using a popular technology: the plugins, the abundance of add-ons, the level of integration. I wouldn't get the benefits of a thousand programmers constantly tweaking the PHP to tune the Facebook Connect module or the reCAPTCHA module if I used another CMS with a smaller community. Countless times in the last few months, I've thought, "I need a reCAPTCHA integration... I'm sure there's a Drupal module." And, for each of these assumptions I haven't been disappointed.
So, the point isn't the quality of the language or even the elegance of the solution. When you use the most popular solution you benefit from the collective attention of a world of users. I'd still be somewhat hesitant to implement some of the systems I implement using PHP. One example, it isn't the right match for book rendering. The Maven-driven book build that produces raw HTML for Drupal, pre-print PDF, and ePub for ITunes Connect runs in Java. A system to manage complex interactions between an Enterprise Service Bus (ESB) and a critical database is still something I would want to wheel out Java for.