This article is also available in Serbo-Croatian
There has been much discussion of late in Drupal about Object-Oriented Programming. That's not really surprising, given that Drupal 7 is the first version that has really tried to use objects in any meaningful way (vis, as something other than arrays that pass strangely). However, too much of the discussion has boiled down to "OMG objects are inflexible so they're evil!" vs. "OMG objects are cool, yay!" Both positions are harmfully naive.
It is important for us to take a step back and examine why one particular programming paradigm is useful, and to do that we must understand what we mean by "useful".
Programming paradigms, like software architecture, have trade-offs. In fact, many of the same methods for comparing architectural designs apply just as well to language design. To do that, though, we need to take a step back and look at more than just PHP-style objects.
Warning: Hard-core computer science action follows. If you're a coder, I recommend getting a cup of
$beverage before continuing, as it could take a bit to digest although I've tried to simplify it as much as possible. There's fairly little Drupal-specific stuff here so hopefully it should be useful to any PHP developer.
As anyone who has followed my past work knows, software architecture is a particular interest of mine. I find the subject fascinating, but my interest is not entirely selfish.
Understanding architecture, and the trade-offs that different architectures imply, is an important part of any software project. Whether you're discussing a Content Management Platform like Drupal, a language like PHP, or a particular web site, having a solid understanding of the "big picture" is crucial not only for building the system right in the first place but for communicating that architecture to others.
To be able to speak and think about the design of your system properly, though, you need to understand the trade-offs that come with it. There is no such thing as a free lunch, and designing a system to be powerful in one way invariably tends to harm it in another. It is important to know what your priorities are before you start building; and in a distributed collaborative environment like Drupal to all agree what those priorities are, at least to a large extent.
Let us therefore examine those priorities and the trade-offs they require.
I meant to post these to groups.drupal.org, but the file size limit over there won't let me. Attached are the slides from my "Drupal: The Next Generation" presentation at DrupalCon Copenhagen. A more complete summary is available over in the working group.
I'm still not aware of any video available, sadly. Supposedly that should be up eventually.
Unless you've been living under a rock, by now you've heard about the case that is certain to keep the armchair lawyers busy for years to come: Oracle vs. Google. It's already been dissected elsewhere, but in a nutshell: Sun owned their GPL-licensed Java virtual machine, and various patents on it; Google wrote their own JVM for the Android platform, Dalvik; Oracle bought Sun; Oracle uses those patents to sue Google over their JVM; Hilarity ensues.
So what? How does that affect us, as PHP and Drupal developers? Well it doesn't... except indirectly via another product that Oracle bought as part of Sun: MySQL.
A few weeks ago, I and several others helped some friends of ours pack up their apartment into a truck in preparation for moving cross-country from Chicago to New York. It was, as such moments generally are, bitter sweet. It's always a good feeling to help out a friend, but when you're helping them get further away from you it's not as pleasant.
Of course, me being me, what struck me most about the whole process was how well it served as a model for software development and project management in general.
I've spoken at several DrupalCons by now. It's always an interesting question deciding what to submit for a session, knowing that only some will get picked but not knowing if I'm going to end up doing just one session I wasn't really interested in or 4 that I have to prepare (yoinks!). So this time I'm going to do something different. I'm going to ask you.
Well, it's been long enough after DrupalCon for me to survive another conference and a business trip, so I finally have time to reflect.
(See below for slides from my sessions.)
I admit it, I'm on Twitter. I have been for a little over a year. I have a fairly low opinion of it in general, but I am still on it and make random comments to people from time to time.
Earlier today, one of the people I follow tweeted that his young (under 5, I believe) daughter had just done something stupid. Nothing illegal or immoral, just the sort of embarrassing and sometimes destructive stupidity that young children tend to get into. And he then tweeted it.
Which means that his under age daughter's actions are now part of the permanent archive of the US government.
It's been five years since I had a major life change. Five years since I finished grad school, found Drupal, and joined the team at Palantir.net, all within a few months of each other. I've learned far more in the past five years than in the seven before it in college and graduate school, both technically and socially. Having a real job will do that to you.
But, it has been five years and it's time for me to move on before I get too settled and lose all forward momentum in my career.
Once again, I am slated to present general Object-Oriented techniques at DrupalCon. It's an important topic; sadly a large number of Drupalers don't really "get" OO programming, but Drupal 7 is starting to make heavy use of OO. There are also an enormous number of places in Drupal where a more Object-Oriented approach would make the code vastly cleaner, simpler, and faster, if only more people thought to approach it from that standpoint.
Of course, the question is how to target such a session. I don't want to talk over people's heads, but I also don't want to waste your time with "this is a mouse"-level material.