I used to really hate Drupal.
That's probably a surprising thing for me to say. I'm the lead developer of Observer.com and Politicker.com, both of which use Drupal heavily. Observer.com was a very early instance of a high-profile newspaper running on Drupal, and it was built by Moshe Weitzman, a very early instance of a core Drupal Contributor. I saw Moshe most recently at Do it with Drupal in New Orleans where we shared the floor at a case study of Observer.com. After our presentation, he asked me to share some details of my transformation from a Drupal hater to a Drupal lover. I hope this might be of some use to other programmers coming into Drupal for the first time, and to the Drupal community as it continues to mature.
I am a propeller head of the usual origins. I was a nerd in high school, a nerd in college, and am still a nerd. I've been writing software since I was 11 or 12; seriously since I was 14, and professionally since I was 18. I worked as a freelancer while I went to school from 18 to 21, then a landed a very corporate IT job at a massive conglomerate for awhile (very custom Java, Oracle, Spring, Hibernate... not pertinent to this discussion). After that drove me predictably insane, I took a contract job at American Public Media, an NPR syndicate in St. Paul, Minnesota. Even though I was only there for three months, I learned a lot about agility, scale, and teamwork in software from them. I learned that cowboy coding is risky, that clear expectations are critical, and that improvisation is usually intolerable. These were the first developers I really respected, and they had nothing very nice to say about Drupal. They rolled their own CMS, which in my understanding is quite good. More power to them.
After my gig at public radio was up, I went to work for ArcStone Technologies, where I fairly quickly became the lead PHP developer. I didn't have much respect for the rest of the shop, which focused almost entirely on ColdFusion development and Windows deployment before my arrival. I'll admit, I led with my ego because I thought they were stupid for using CF and Windows. I mostly wrote software in PHP from scratch until I had built my own framework. "Build your own framework" you say? "only idiots do that!" Yeah, I already mentioned my ego problem. Still, I had some fun, learned a lot about web application architecture, and ArcStone made some money. No real harm done. I'm not alone here--many web developers have written their own frameworks and many more have tried and failed. At any rate, I was young and needed a sandbox, and ArcStone needed technical talent in the LAMP stack to help them through some transition pains. I made some good contacts for them in the Minneapolis developer community and made a couple of good friends as a result.
I left ArcStone for the East Coast planning to do some consulting for awhile; I had agreed to continue working for ArcStone as an hourly employee and found some work of my own. In October of 2007, I was staying with my girlfriend in rural Connecticut and doing freelance work while I looked for a job in New York City. It didn't take me long to go on a handful of interviews. I was offered every job I applied for, but I only actually wanted to work for The Observer. This was based on how much I liked their team and an idealistic streak that makes media more appealing to me than a financial services firm or a consultancy. I resolved to put aside my slight notions that Drupal was bad, and give it a shot.
A couple weeks into the new job, I went up to Boston to meet Moshe Weitzman. I liked him from the start--he's friendly and down-to-earth. But the more I dug into Drupal, the less I understood why it was so popular. I started in Java and used PHP like Java, and my other languages of choice are Python and Ruby--it wasn't until after I learned Drupal that I started seriously playing with Lisp and Erlang. "Where are the objects?" I asked Moshe. He directed me to this post about Object Orientation in Drupal which is an interesting exercise in Drupal Apologetics, but I only became more frustrated. If you take that post seriously as Drupal Gospel, and you take Object Oriented Design seriously as a practice, you're not likely to come out very happy. I was enraged to learn that the Drupal community thought that they were doing Object Orientation (they don't really think that, at least not in this sense), and they thought they were doing it better than it was written in PHP (they don't think that either). So I thought Drupal's core developers were misguided egomaniacs.
Aside from my philosophical dissonance with the design of Drupal, I was struggling to make things work properly on Observer.com. I inherited a good bit of chaos, some from Moshe, some from Barry Jaspan, some from our hosting provider, some from a prior employee, all mixed into one source tree. SQL queries were written against CCK fields, an unspeakable evil was perpetrated by storing the published date of an article as a varchar field then sorting it... long story for another post, but I've got more. Anyways, it wasn't their fault. Individually, their decisions made fine sense, but layering change over change with tight deadlines takes a toll on most frameworks. I couldn't have done it; their facility with Drupal made short work out of a litany of very tough challenges. Still, Observer.com made me think that Drupal was a mess of spaghetti code.
Then our servers started to crash under the burden of too much traffic. We got into fights with our hosting provider, who thought we should take the Drupal route to caching our content; there are a couple of contrib modules that take static snapshots of pages and then serve them from cache; fastpath_fscache requires a PHP process to serve the content, Boost just uses mod_rewrite. I admired the elegance of Boost's solution, but we couldn't get it working, and in retrospect, it wouldn't have protected us that much anyways. So I thought that the Drupal community was averse to non-Drupal solutions, that if it can be done, it can be done in Drupal. On this point, well, technically HTTP Acceleration *can* be done in Drupal via the aforementioned modules, but not well enough for a site like Observer.com. Most Drupal developers realize this. Those that don't--take it from me. Drupal is not an HTTP Accelerator. This is the case with a lot of things--you can Do it with Drupal, but if you run a site as large as Observer.com, you'd better think more carefully about every byte of code you deploy.
So I suffered from a preconception that Drupal was bad, that its developers were egomaniacs, that it was impossible to write clean code for Drupal, that it was unstable, and that its community suffered from a delusion that the only right way is the Drupal way. Yet, remarkably, I'm still here, writing this post, on my personal Drupal-powered website.
The community! I've had more fun writing software for Drupal because of its community than for any other reason. It's active, vibrant, and it likes to meet in person. I've gone to Boston a couple times, New Orleans, and various events in New York in the year I've known Drupal. Because Drupal is so large, if you don't get along with one member of the community, no worries, there are 299,999 more for you to meet. Drupal's community will make you happy, unless you have a heart of stone.
"Software that makes you happy?" Yes, software that makes you happy. Drupal is software that likes you back. Only a few months ago, this thought would have really disgusted me. I'm an efficient and intelligent programmer,, I would have thought. Software shouldn't make you happy, it should just get the job done. Aside from that fact that most of the time, Drupal does get the job done, and getting the job done should make you happy, Drupal has so many built-in conveniences that you can spend more of your time doing what makes you happy. Like today--I built this site and customized this theme (it's "SuperClean") to my preference in an hour, giving me three full hours to respond to write this post. And if you like writing software for Drupal, you can get an added happiness bonus by contributing back to the community. I will say that Drupal isn't the only software that makes me happy--Django makes me happy too, but I haven't gotten to know their community quite as well.
There is elegance in Drupal. Drupal's API feels more Aspect Oriented to me than Object Oriented--you define hooks that you want to interfere in the process at various points. If Drupal were purely Object Oriented, we couldn't get nearly so much for free. Not to say that Drupal isn't at all Object Oriented, I just don't buy the "modules are singletons" argument. Sure, modules are like singletons, but if you wanted to make a singleton in PHP, this isn't how you'd do it. And in fact Drupal will take advantage of more Object Oriented features in Drupal 7. In Drupal 6, Views in particular allows for some very powerful customization via object inheritence. There are few other frameworks out there like this--Drupal has done everything possible to be as useful to me as to the user who hasn't ever written a line of code. I think it's good to have novice users on the system. It makes us more conscious of usability, documentation, and general politeness.
Only a year ago, I thought it was insane that Drupal doesn't use objects and classes. Now I find myself hoping that Drupal doesn't overdo it; they could really alienate and confuse some of their users if they aren't careful. These days, I'm looking to be a more active member of the community--not just another user. Can there be better proof that I'm cured?
On Drupal's Technology.
On Drupal's Community.
Thanks!
Thanks for this excellent post. It almost exactly mirrors my feelings about Drupal and it's community.
Although I'm a happy Drupal
Although I'm a happy Drupal developer and -user, I understand your prior aversion against the concept. Today, I don't want to miss hooks, they make writing modules very easy. About the community: you're right, it lives and it helps.
Drupal is software that likes you back.
Best. Quote.
This is a great article. I hope that you will put your new Drupal site through the paces and write more. From our couple brief conversations in Boston and NOLA I've already come to see how much you have to offer - and now I know where I have to look for it =)
-Robert
Great Post!
You've done a great job describing how many of us developers feel when we first encounter this "Drupal" thing!
I actually find myself flipping between loving and hating Drupal on a regular basis... though Drupal always gets my love in the end. :)
Also, it's nice to see a developer acknowledging that going full-force with OOP at this stage (even though I would love it!) would probably do more harm than good. So many developers I've talked to say things like "Screw the noobs, go OOP!" Your attitude is one we need to help everyone adopt.
Thanks for sharing!
Josh
wow. Your article expresses
wow. Your article expresses quite some of the stages i went through, too, and many others find themself somewhere in those lines, too. Everyone who ever's been at a Drupalcon/-camp can feel and experience the kind of spirit you describe that's quite unique to the drupal community. This certainly ist one article every PHP developer new to drupal should read. Could spare you months of pain and frustration and directly boost you to your first taste of drupal-enlightenment!
Modules you trust
Would you be so kind as to specify which modules you personally trust, i.e. those from which you know that they work as specified/intended?
Thank you for this great post, your insight is much appreciated.
Best wishes,
Marc
Seconded.
Seconded.
Great writeup
Hello, Austin,
Thanks for putting this together. Now, when people ask about the Drupal learning/appreciation curve, I'll be able to point them to this post.
Very nicely done, and thanks.
Cheers,
Bill
Modules you trust
I'd like to second the request for the modules you trust.
Given the limited out-of-the-box functionality of a generic Drupal install with only core modules like Acquia (in comparison with, say, WordPress), contributed modules are critical for a non-programmer like myself ;)
Just to be clear...
... Acquia Drupal comes with many more modules than just Core. That's the purpose of us building a distribution (singular now, plural later): to provide core plus a collection of modules that create a more usable "out-of-the-box thing."
By (good) design philosophy, Core is kept to a minimum, so that it doesn't become covered with crustaceans and limit its nimbleness over time. But companies like Acquia can create purpose-assembled distributions to speed the on-ramp to using Drupal for those named purposes. You'll see more from us in the future on this.
Sorry, after numerous
Sorry, after numerous attempts at reconciliation over the years, I still hate Drupal. And I don't hate them, but often find the Drupal community makes excuses for bad decisions (the OO doc a glaring case in point, since many people in the community are CS or very experienced, it's a blatant case of intellectual dishonesty, designed to misguide newbies), and tries to claim they invented things that were invented long ago.
If Drupal does *exactly* what you want out of the box, great, otherwise you'd better learn to make friends and settle into very arbitrary and often convoluted ways of doing things. I think you're better off using a lower level framework composed of good fine grained components, using a good language designed for maintenance and interoperability (unlike PHP), rather than a rigid CMS like Drupal.
Funny. I have a quite similar
Funny. I have a quite similar biography. I like to use PHP like Java as well. 5 months ago I started a new Job, where I have to work 100% with Drupal. I'm still in the "Why I hated Drupal"-phase.
I have to admit, that it brings a lot of functionality for social networks, a real timesaver! But the philosophy behind it and the resulting code really seem awkward to me.
Often I end up, building my own classes as layer on top of certain node types or the "user" to access the data I need more intuitively. I shouldn't be doing this, I know, but right now I feel that Drupal leaves me no other choice.
Hooks are a nice concept, in theory, but when you have a lot of modules and something goes wrong, you're in debug hell to find the hook that is causing the problem.
I love it too
It is hard to learn first ;) but now I love it :D
good points
Thanks for the great article. You've described exactly why it's difficult to take skilled developers with no Drupal experience and throw them on a Drupal project. Drupal is particularly not suited to the often quite smart developers who would prefer to write and rewite everything themselves than to work off of existing code.
If a skilled developer likes
If a skilled developer likes to reuse existing code, highly depends on the quality of the code in question.
I, for example, *love* to work with symfony. The philosophy and the quality of the code are very neat. There are also quite a lot of other libraries I like to use.
But... when I look at a lot of Drupal modules on the other hand, I tremble with horror.
Seriously? You're pro-drupal
Seriously? You're pro-drupal because of the community and hooks? I get that some smart people are probably working the project to death, and the way they offer hooks could be useful (thou i doubt its anywhere near as flexible as it should be).. But reading through a few of their patch logs is laughable - its as if no one knows whats going on. Most scary of all, the guy who is writing the patch.
Bah, just another CMS to ignore. Sometimes everything to everyone equals nothing [useful] to anyone.
Eh?
thou i doubt its anywhere near as flexible as it should be
It is apparent you haven't worked with Drupal, Anonymous. Your doubt indicates your uncertainty. There is little to suggest why you have reservations other than third, fourth and fifth party contributions. Fine. Yet, find all of those valuable and worth building upon, even though some contributions may be appalling. You have an opportunity to fix it. If you think it smells like shit, you haven't smelled your own. Everybody Poops.
I prefer writing Ruby and Python. Not a slight to Drupal or PHP, just my preference. Drupal isn't my bliss. It is, however, very good.
Some modules are sketchy, yet some modules are coded better than Drupal core. It is not a Drupal thing or a PHP thing. That's another matter. If you can best what you say is poor, Anonymous, you will be famous -- and you will share that with my other Anonymous friends.
Cowboy up.
I HATE drupal.
i can`t really handle drupal either..
I`ll just keep with Django.
maybe in the future i will give it a go again. and take a look in the community you mentioned.
Post new comment