The Origins of Pattern Theory,the Future of the Theory, And The Generation of a Living World (Part A)
by Christopher Alexander
The following presentation was recorded live in San Jose, California, October of 1996, at The 1996 ACM Conference on Object-Oriented Programs, Systems, Languages and Applications (OOPSLA).
Introduction by Jim Coplien
Once in a great while, a great idea makes it across the boundary of one discipline to take root in another. The adoption of Christopher Alexander’s patterns by the software community is one such event. Alexander both commands respect and inspires controversy in his own discipline; he is the author of several books with long-running publication records, the first recipient of the AIA Gold Medal for Research, a member of the Swedish Royal Academy since 1980, a member of the American Academy of Arts and Sciences, recipient of dozens of awards and honors including the Best Building in Japan award in 1985, and the American Association of Collegiate Schools of Architecture Distinguished Professor Award. It is odd that his ideas should have found a home in software, a discipline that deals not with timbers and tiles but with pure thought stuff, and with ephemeral and weightless products called programs. The software community embraced the pattern vision for its relevance to problems that had long plagued software design in general and object-oriented design in particular. Focusing on objects had caused us to loose the system perspective. Preoccupation with design method had caused us to loose the human perspective. The curious parallels between Alexander’s world of buildings and our world of software construction helped the ideas to take root and thrive in grass-roots programming communities world-wide. The pattern discipline has become one of the most widely applied and important ideas of the past decade in software architecture and design.
We can trace the path of influence through three primary sources. The first is the Design Patterns book by Gamma et al., a book that helped people conceptualize beyond individual design relationships to grasp important structure of micro-architectures, and to value proven solution strategies over raw innovation. The second was the series of pattern conferences (PLoPs) that provided a forum for pattern enthusiasts to support each other in creating a new body of software literature. The PLoPs were also a forum where the community could struggle with growing from individual patterns to pattern languages that engender systems thinking.
But growth into the deeper and more fundamental aspects of patterns has been slow and difficult. And even as we struggle with the growth from patterns to pattern languages, there is a level of the pattern discipline that the software community has yet scarcely touched: the moral imperative to build whole systems that contribute powerfully to the quality of life, as we recognize and rise to the responsibility that accompanies our position of influence in the world. And that leads us to the third inspiration for the direction of patterns in our discipline: Christopher Alexander himself, who directly engaged our community in this keynote speech at OOPSLA ‘96. The timing and audience of the venue afforded Alexander the chance to reflect on his own work and on how the object-oriented programming community had both hit and missed the mark in adopting and adapting his ideas to software. As such, the speech was a landmark event that raised the bar for patterns advocates, for object-oriented programmers, and for software practitioners everywhere. Beyond that, this speech has timeless relevance to any engineering, scientific, or professional endeavor.
* * *
… I’d like you all to very heartily welcome Professor Alexander as he addresses us.
Keynote Address By Christopher Alexander
“Thank you very much. This is a pretty strange situation I find myself in. I hope you sympathize with me. I’m addressing a room full of people, a whole football field full of people. I don’t know hardly anything about what all of you do. So – please be nice to me.
My association with you — if I can call it that — began, oh it must have been two or three years ago. I began getting calls from computer people. Then somebody, a computer scientist, called me and said that there were a group of people here in Silicon Valley that would pay $3000 to have dinner with me. I thought — what is this? It took me some time to find out. I didn’t really understand what had been going on, and that my work had somehow been useful to computer science. Only now I’m now beginning to understand a little bit more of what you are doing in your field and the way in which it comes, in part, from some of the things that I’ve done.
When I faced the question of addressing you, I wondered what on earth I should talk about. And, earlier, a few months ago I faced a similar thing when I was asked to write an introduction to Richard Gabriel’s book (Patterns Of Software) and again the question for me was what in the world should I write about? What is there that I could say that would be of interest? And, because I, in a way, myself started out in computers many years ago in the late ’50’s, this question became quite fascinating to me and quite absorbing. But still, I wasn’t given much to go on. Take Jim for example. When he invited me, he was very friendly and I said to him – look what do you want me to talk about and so forth. He said “Oh that doesn’t matter. Just talk about anything. Because it’s you, and because of the history of this pattern problem, people will find it interesting. But still I thought, What should I really talk about?
What is the connection between what I am doing in the field of architecture and what you are doing in computer science and trying to do in the new field of software design? That is the question I must talk about. What I’ll do, in the time I’ve got here, is to tell you where my thoughts went as I stepped through the invention of the pattern concept, and where I have gone since then. In addition, I shall reach a conclusion which may surprise you. As I’ve been preparing for this speech during the last few months. I ended up with something that may startle you, and you may find quite strange. But, I’m not going to tell you what that is just yet.
In effect, I’m just going to do three things.
(A) Pattern Theory. I’m going to talk first of all about patterns and pattern languages, what I did about that, a few little points about problems we encountered, why we did it, how we did it, and so forth. That is a historical survey referring back to the late 60s and early 70s.
(B) The Nature of Order. Then, I’m going to summarize the theoretical framework which has evolved out of the pattern work: a framework which is about to be published in a series of four books collectively called The Nature Of Order, four books that will be put out by Oxford University Press in the year 2000. That framework is a fairly radical departure from what the pattern language in the earlier theories contained, although it is consistent with them. That’ll be the second thing. And, I’ll just try and sketch that out in the hope that there might be some carryover or you might possibly find it interesting — even though of course I will have no way to apply this to your field directly when I tell you about it. However, there are undoubtedly abundant connections between the two fields that can be drawn.
(C ). What the future holds in store: The Generativity Problem and the Generation of a Living World. At the time I wrote the introduction for Richard Gabriel’s book, that was really as far as I had gotten in trying to trace the connection between my work and your work in the field of computer science: I tell you what I’m doing, and maybe some of you folks might find it interesting or be able to extrapolate. But I couldn’t really find that sufficient to be satisfying. I felt that there is some more significant connection between your field and mine. Or at least that there perhaps is. And that finally brought me to the third point.
The third thing I’ll talk about is how I now perceive that connection. I suppose that some of you know what I do for a living. You know I’m an architect. All of my life I’ve spent trying to learn how to produce living structure in the world. That means towns, streets, buildings, rooms, gardens, places which are themselves living or alive. My assumption here – a sad one — is that for the most part what we have been doing for ourselves, at least during the last fifty years or so, perhaps starting somewhere around World War II, has virtually no ability to produce that kind of living structure in the world. This living structure which is needed to sustain us and nurture us and which did exist to some degree in the traditional societies and in rural communities and in early urban settlements has disappeared. It is drastically gone. We don’t know how to create it or generate it any more.
Of course, especially for architects, that is a debatable matter. Some professional architects might say, What are you talking about? What we are doing is absolutely fine, the buildings we are building today are excellent, very good, no problem!! I suppose the architect of this particular huge and nauseating conference hall we are in, here in San Jose, where we can hardly understand each other, would say that, too. But, actually, it isn’t fine. It’s a hell of a problem. It’s a serious problem. It affects every man, woman, and child on Earth. We are so ignorant about how to do this, to make living structure on Earth, it is lamentable. And it is very, very serious, becomes more serious every day, because the population of the Earth is growing, and the Earth is being damaged more and more – and with the damage to our towns and buildings, we too are being damaged.
The fact that we don’t know, really do not know what we’re doing, and the fact that the built world is not nurturing is a very, very drastic matter for all of us. This is my concern. That is what I try to deal with every day.
A. Pattern theory
The idea that materialized in the published pattern language was first of all, of course, intended just to get a handle on some of the physical structures that make the environment nurturing for human beings. And, secondly, it was done in a way that would allow this to happen on a really large scale. And, what I mean by that is that we wanted to generate the environment indirectly, just as biological organisms are generated, indirectly, by a genetic code. Architects themselves build a very, very small part of the world. Most of the physical world is built by just all kinds of people. It is built by developers, it is built by do-it-yourselvers in Latin America. It is built by hotel chains, by railroad companies, etc., etc. How could one possibly get a hold of all the massive amount of construction that is taking place on Earth and, somehow, make it well, that means let it be generated in a good fashion and a living fashion. This decision to use a genetic approach was not only because of the scale problem. It was important from the beginning, because one of the characteristics of any good environment is that every part of it is extremely highly adapted to its particularities. That local adaptation can happen successfully only if people (who are locally knowledgeable) do it for themselves. In traditional society where lay people either built or laid out their own houses, their own streets, and so on, the adaptation was natural. It occurred successfully because it was in the hands of the people that were directly using the buildings and streets. So, with the help of the shared pattern languages which existed in traditional society, people were able to generate a complete living structure.
In our own time, the production of environment has gone out of the hands of people who use the environment. So, one of the efforts of the pattern language was not merely to try and identify structural features which would make the environment positive or nurturing, but also to do it in a fashion which could be in everybody’s hands, so that the whole thing would effectively then generate itself.
What, now, of my evaluation of what you are doing with patterns in computer science. (Bear in mind, as you hear my comments, that they need to be taken with a grain of salt; I’m ignorant; I’m not in your field.) When I look at the object-oriented work on patterns that I’ve seen, I see the format of a pattern (context, problem, solution, and so forth). It is a nice and useful format. It allows you to write down good ideas about software design in a way that can be discussed, shared, modified, and so forth. So, it is a really useful vehicle of communication. And, I think that insofar as patterns have become useful tools in the design of software, it helps the task of programming in that way. It is a nice, neat format and that is fine.
However, that is not all that pattern languages are supposed to do. The pattern language that we began creating in the 1970s had other essential features. First, it has a moral component. Second, it has the aim of creating coherence, morphological coherence in the things which are made with it. And third, it is generative: it allows people to create coherence, morally sound objects, and encourages and enables this process because of its emphasis on the coherence of the created whole.
I don’t know whether these features of pattern language have yet been translated into your discipline. Take the moral component, for example. In the architectural pattern language there is, at root, behind the whole thing, a constant preoccupation with the question, Under what circumstances is the environment good? In architecture that means something. It means something important and vital that goes, ultimately, to the nature of human life. Of course, there are plenty of people who will debate whether the question is objective. Some architects are still going around saying, It is all a matter of opinion. But that is a dying breed. The moral preoccupation with the need for a good environment, and for the living structure of built environment, and the objective nature of that question, is largely accepted. I do not know whether that sort of moral component exists in computer science, or in software engineering, or in the way in which you do things.
I understand that the software patterns, insofar as they refer to objects and programs and so on, can make a program better. That isn’t the same thing, because in that sentence “better” could mean merely technically efficient, not actually “good.” Again, if I’m translating from my experience, I would ask that the use of pattern language in software has the tendency to make the program or the thing that is being created is morally profound — actually has the capacity to play a more significant role in human life. A deeper role in human life. Will it actually make human life better as a result of its injection into a software system? Now, I don’t pretend that all the patterns that my colleagues and I wrote down in A Pattern Language are like that. Some of them are profound, and some of them are less so. But, at least it was the constant attempt behind our work. That is what we were after. I don’t know whether you, ladies and gentlemen, the members of the software community, are also after that. I have no idea. I haven’t heard a whole lot about that. So, I have no idea whether the search for something that helps human life is a formal part of what you are searching for. Or are you primarily searching for – what should I call it – good technical performance? This seems to me a very, very vital issue.
People have asked me what kind of a process was involved in creating the architectural pattern language? One of the things we looked for was a profound impact on human life. We were able to judge patterns, and tried to judge them, according to the extent that when present in the environment we were confident that they really do make people more whole in themselves. Of course you may ask, How in the hell did you test for that? But that is too long a story which I cannot cover in this speech. The important point is that such testing was going on continuously.
A second, almost more important thing was going on. Whenever we had a language under development we always asked ourselves, To what extent does that language generate (hence produce) entities (buildings, rooms, groups of buildings, neighborhoods, etc.) that are whole and coherent? In other words, suppose I write a pattern language for a campus, and, I think I’ve got some sort of a language that looks as though it will actually do the job. To test it, I let it loose by giving it to people and asking them (in simulated form) to generate different campuses with this language. Let’s see what the resulting campuses look like. And we test it ourselves in the same way, by using it to generate designs, rapidly, and only for the purpose of testing the results for their coherence. As it turns out, many of the languages that one creates do not generate coherent designs or objects. That is, they contain a bunch of good ideas. One can use these good ideas to (sort of) put something together from them, and a few fragmentary structural ideas will be present in the result. But that does not yet mean that the campuses created (in the above example) are coherent, well-formed, campuses? We were always looking for the capacity of a pattern language to generate coherence, and that was the most vital test used, again and again, during the process of creating a language. The language was always seen as a whole. We were looking for the extent to which, as a whole, a pattern language would produce a coherent entity.
Have you done that in software pattern theory? Have you asked whether a particular system of patterns, taken as a system, will generate a coherent computer program? If so, I have not yet heard about that.. But, the point is that is what we were looking for all the time. Again, I have no idea to what extent that is true for you and whether you are looking for the same thing when you work on software patterns.
So far, as a lay person trying to read some of the works that have been published by you in this field, it looks to me more as though mainly the pattern concept, for you, is an inspiring format that is a good way of exchanging fragmentary, atomic, ideas about programming. Indeed, as I understand it, that part is working very well. But these other two dimensions, (1) the moral capacity to produce a living structure and (2) the generativity of the thing, its capability of producing coherent wholes — I haven’t seen very much evidence of those two things in software pattern theory. Are these your shortcomings? Or is it just because I don’t know how to read the literature?
So much for my short historical survey of what we have been doing with pattern languages during the last three decades.