The Essence of Patterns
By Roderick Lim Banda
In the Foreword to Microsoft's Enterprise Solution Patterns (ESP), Ward Cunningham mentions a few ways in which this work is important.
"The pattern community has invested a decade finding, writing, and reviewing patterns in what would have to be called an academic tradition of impartiality. This work is different. It is clearly in the sponsor's interest to have .NET well understood and this volume has that goal. However, that the sponsor would invest effort writing patterns is their acknowledgment that the decade of work has merit. The pattern community should be proud and should respond by reading, reviewing, debating, and enlarging this work."
It is important not to fall into the trap of using the patterns as a method without understanding its essence. Why do we do it? Is it simply to build "better" software systems? To answer these questions, we need to go to the source and the one who inspired the patterns language and movement - the architect, Christopher Alexander.
Alexander himself was surprised by the adoption of the pattern language he had developed for building architecture by the software community. In 1996, he addressed the software community at the conference on Object-Orientated Programs, Systems, Languages and Applications (OOPSLA). He outlined the essence of patterns, where the software community was falling short and challenged them with a goal for the future.
The essence of patterns can be traced to Alexander's own work of four volumes containing over forty years of studying architecture in different parts of the world. Alexander is driven by his concern over the way architecture has failed to address human life, nature and our environment. "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."
Architectural theorists might simply associate this concern with modernism and the postmodern crisis, but Alexander went further and studied how design occurs in nature. He looked at both natural and man made structures in pursuit of that "quality without a name". There are those who argue that what constitutes "quality" and what can be regarded as "good" is subjective, but Alexander believes that there are common and fundamental geometric properties found in all structures.
"Things that are good have a certain kind of structure. You can't get that structure except dynamically. Period. In nature you've got continuous very-small-feedback-loop adaptation going on, which is why things get to be harmonious. That's why they have the qualities that we value. If it weren't for the time dimension, it wouldn't happen. Yet here we are playing the major role in creating the world, and we haven't figured this out. That is a very serious matter." (Brand, 1994)
Alexander defines a unit of construction in all things called "centers". Centers are complete "wholes" and there is a progressive recursion in their generative growth. The object-orientated software community has adopted this approach for software construction through the association with "objects" and "iterative life cycles".
In studying patterns, Alexander defined the pattern language using the pattern form. The initial patterns consisted of a simple form containing a visual sketch or diagram, the problem, context, forces and solution. Today, there are many variations and extensions of the pattern form used by the pattern community. As Alexander noted, the software community has been fairly successful in adopting the pattern form.
"... 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 in his OOPSLA address, Alexander was concerned that the software patterns community was missing the point, that they were in fact placing too much emphasis on the method rather than the essence.
"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'."
In his pattern theory, Alexander had noted three important elements: the form and language, the moral capacity and generativity. "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?"
That was 1996. Correcting this short coming, if we are to admit to it as a community, is an increasingly difficult challenge in a world disillusioned with IT since the dot.com bubble. Creating patterns into a platform such as .NET and making use of this body of knowledge should incur the responsibility for meeting that challenge. Systems affect society and this planet more than we care to acknowledge. We cannot simply abstract the internals of the components without considering the implications on the external world.
In his address at OOPSLA, Alexander not only reminded the software pattern community of this responsibility for moral capacity but also passed a torch with regards to generativity and the future.
"Let us now consider a problem of magnitude ... we're somewhere up around 1014 square feet of constructed designed space. How are we going to deal with all that? How do we create, or generate, living order in 1014 square feet of construction? ... All the architects in the world, together, working as they do today, cannot design more than say 1010 square feet per year -- a tiny, tiny percentage of what is needed -- far too small to be effective."
"I have, for many years, thought that this could only be solved by a genetic approach -- an approach where deep structure, spread through society, creates and generates the right sort of structure, very much as genetic code creates and generates organisms and ecological systems -- indirectly, by letting loose life creating process."
"I am convinced that the equivalent of the genes that act in organisms will have to be -- or at least can be -- software packages, acting in society. If these software packages are life creating, and accepted, and widely enough spread throughout the world, there is a chance we might get a grip on this problem: provided that the software is freeing, liberating, allows each person individual control and decision making power to do the right thing, and to create living structure, locally, wherever they are. This task must fall, inevitably, at least in part, on your shoulders."
What a daunting thought ... and here I am still struggling to get my interops to work. But think about it for a minute. If there are not enough building architects to cope with ordering concrete structures, how many software architects are there that can cope with taming the abstract systems being developed at the "speed of thought"?
The call is to architect and the challenge is to build generative systems that can change over time and follow the fundamentals of structure. To understand what is "good" is what patterns is about. We may not think we need to consider building "good" systems because our abstract designs have no impact on the world around us, let alone the planet. But think of "bad" systems, stress and life in a technology driven world.