More Talks "Design Patterns" Aren't   (note)


Some people seem to have missed the point of this talk.

I am not saying "design patterns" are a bad idea. GoF-style design patterns seem to me to be an interesting and valuable idea, worth studying and developing. Even in their least interesting form, people do need to work around the severe deficiencies of C++, and if "design patterns" help them do that, it's a good thing.

My only major complaint is about the name. My talk points out that there is this other, different idea, that goes by almost the same name. Because it has almost the same name, the programming community is not paying attention to it---they think they are, but they are mistaken. That is a shame, because I think it is a really good idea---one that is potentially much more powerful and valuable than "design patterns".

So here again is the one-sentence summary of the only important point of my talk: We need to take a fresh look at Christopher Alexander.

That's all I'm saying.

Thanks again for your interest.


I was dreading the righteous wrath of the Design Patterns community. And I felt I would deserve anything I got for having associated their movement, however peripherally, with goat dick.

But what I have gotten has been much better than I expected or deserved. The comments I have seen on people's weblogs and have received by email have been universally thoughtful, polite, and insightful. I am sheepish but pleased. I did not expect this silly talk to generate any valuable discussion, but it has, and the credit should go to everyone but me.

My grateful thanks to everyone who has written in with ideas and discussion.

Addendum (20021105)

It appears to me that almost everyone who has read this has completely missed the point, even though I said it twice in big letters. People keep sending me mail that says things like this:

I just read through you article "Design Patterns" Aren't. I'm afraid you got it all backwards. At least the iterator example is totally flawed.

Or people spend a lot of time arguing about how foreach is not analogous to an iterator pattern, or how it doesn't do the same thing, or how even if it does, I'm still wrong, because Perl has no analogous replacement for a model-view-controller pattern, blah blah blah. None of this has anything to do what the point of my talk. I really wish I'd left out the thing about the iterator pattern.

Why do people focus on pages 4, 5, and 6 of a 13-page talk, and forget all about slides 8, 9, 10, 11, 12, and 13, where I make the real point? I have a few theories. One theory is that most of these people are technical experts. They're equipped to consider technical issues, but not much else. When all you have is a hammer, all you can see are the nails. That's what happened to the guy above who said I "got it all backwards." What? The point of my talk was that we need to take a fresh look at Chrsitopher Alexander; if I got it backwards does that mean he thinks we should avoid taking a fresh look at Christopher Alexander? Or does he think that Alexander should be looking at us instead? No, he just forgot about everything after slide 7.

Another theory is that some of these folks have allied themselves with the Tribe of the Pattern, so anything that appears to be an attack on patterns, or critical of patterns, or which even says anything critical (say, criticizing C++'s crapulent macro system) in a context that discusses patterns, becomes a personal attack on them, and they have to defend themselves against it. Since most of these people haven't read the Alexander book, they can't possibly argue with my point. But they know about iterators, so they argue with me about that. To date, nobody has written to me to say that I misunderstood what Alexander was saying; just loads of stuff about how I don't understand iterators. But the iterators are irrelevant. Just ignore that part of the talk if it bugs you. It's not important.

No. The point of the talk is this: The "design patterns" you get from the Gang-of-Four book are not the same as the idea of "design patterns" that are put forward in Alexander's books. People say they are, but they aren't the same thing. Alexander's idea is a really good one, one that programmers might find useful. But very few programmers are going to find out about it, because they think they already know what it is. But they actually know this other idea which happens to go by the same name.

So (once again) we need to take a fresh look at Christopher Alexander.

Forget what I said about the damn iterator pattern, already.

More Talks Copyright © 2002 M. J. Dominus