Drupal, Zope, and the Importance of Being Really Smart

Posted by Daniel Lyons Fri, 14 Dec 2007 06:50:00 GMT

In response to a -1 ranked remark I made on Reddit, there was a little controversy and I eventually wound up writing a somewhat longer comment which really should be here on my blog instead (and which I will move here if anyone complains about not being able to follow the link). It’s all mostly me complaining about Drupal but there is a kernel in there I want to dredge up, having to do with the importance of having really smart people.

mcantelon on Reddit said this: “If you spend some time in the dev list you’ll likely see quite clearly that Drupal has some very smart people behind it trying to improve it from many angles.” This reminds me of the same kind of crap I used to hear about Zope being written by geniuses who really grok object “technology” and are trying to solve these really hard problems for all time.

I want us all to take a deep breath and realize that there is absolutely no correlation between intelligence and quality of a program. None. And there are three reasons why I think this is so:

  1. Good programs are the concrete manifestation of good ideas, implemented correctly.
  2. Intelligent people often write bad programs.
  3. Good programs tend to be built on simple but elegant principles.

My objection to Drupal is that it is a horrid over-complex morass with no elegant concept. You cannot have a bad idea and implement it so well, everyone will love it. There is no perennial example of this because programs like this (like Drupal) tend to be around only for a few years and then everyone kind of snaps out of it. I guess you could say PL/1 is an example of this. Sometimes you come up with an idea for a solution to some problem and the idea is just plain stupid. CORBA is probably another more recent example of this. Nobody’s using it except people who have to for backwards compatibility. It was a good idea turned extremely stupid. (If you still want remote objects for delivered applications, you should check out Ice which removes a lot of the absurdities.)

On the second point, consider Microsoft. They try desperately to hire the best and brightest people and have for decades. While they were writing Vista, they were also writing C#. They do not lack the capability to bring a good idea to fruition. They are really bad at figuring out what is a good idea and what is not. And of course they have other problems.

Making a good program isn’t rocket science. On the contrary, it’s making something simple. Appparently making something simple is harder than making something complex. I stare in wonder and amazement at the capabilities of the amateur programmer who wrote one of my client’s systems. I just don’t understand how a human being could make something so complex and have it work. Of course it’s brutally unmaintainable. It’s not hard to look at a pile of specs and make a bunch of unrelated features. It’s hard to look at a pile of specs and say, what is this really about? What is the underlying universe that makes this problem complete?

A good programmer is not someone who can manage a thousand complex little exceptions. It’s someone who can unify them and remove them altogether with some commonality. That takes insight and aesthetics. Nobody has to be told that DHH is this incredible genius. You just watch the blog demo and ask yourself how everyone else could have been so stupid. That’s what elegance is about. It’s the opposite of the experience you have when you look at Drupal. You do wonder at the brilliance of the developers. You have to be brilliant just to understand it! You don’t have to be brilliant to use ActiveRecord. Elegant systems try and get out of your way. Egotistical systems have to get in your face in order to remind you how smart their inventors were.

What’s amazing about Lisp and Smalltalk is that the systems are so simple, one has the feeling they were discovered rather than invented. That’s elegance. Nobody will ever be surprised by something some Drupal plugin does. But every day people are surprised by the things they can accomplish with so little code in elegant systems like Lisp and Smalltalk.

Frankly, I found Zope to be tremendously insulting. To be told by the documentation that brilliant minds were behind it made me feel like an idiot for not understanding it. Apparently a lot of other people were struggling to learn and use Zope and also hurt by this marketing, and now they’re moving over to Django and Rails in droves, which do not try to insult you. There’s something disingenuous about saying a system is brilliant, just install a bunch of plugins and don’t ask too many questions about how it works. Again, with Lisp and Smalltalk, you can get everything from a paragraph or two of text and there’s nothing left to learn about how it works. Just a lot of time to really absorb and understand the ramifications. Small but extremely powerful versus large and well-stocked. You can’t evolve something from inelegant to elegant by stapling on more stuff. Stapling on more stuff being, incidentally, the only way programs can evolve.

Dijkstra pointed out something interesting in his Discipline in Thought video. Elegant software has the curious property of often being the most efficient. It seems obvious without thinking about it, but why should it be? Why should there be a correlation between elegance and speed? I’m not sure whether or not it’s harder to create elegant software, though it apparently requires up-front thought which makes it unacceptable to some programmers. Inelegant systems can improve but only so much. Elegant systems can go from being quite abysmal to being really excellent. It’s hard to read early Lisp code today, and early Lisp code deserved its reputation for being slow. Today it’s quite readable and substantially faster than the in-vogue languages, and often faster than C. PHP will never be much faster than it is today. It derives much of its speed from dirty tricks it should stop doing—earlier versions of it, which no doubt were faster, never freed memory, depending on the short lifetime of HTTP requests to manage that problem as a primitive form of garbage collection.

There’s nothing new about what I’m saying. I’m saying the same thing programmers from every generation have been saying going back to the 60’s. If you want to build good systems they have to be simple. If they’re not simple and elegant they’re going to be large and clunky and we won’t be able to understand them. Don’t trust any software that comes from someone who is trying to convince you they’re smart. If you want to worry about that, let the technology convince you.

Tags , ,  | no comments

Comments

(leave url/email »)

   Comment Markup Help Preview comment