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? 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 as 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.