Christopher Alexander still matters

You probably know Christopher Alexander, at least indirectly.

Christopher Alexander is an architect. But not a J2EE architect, you geek! Alexander is rather of the bricks & mortar kind – you know, houses, bridges, buildings... Yet you probably know him, because he is the thinker behind a number of concepts that have brought us the famous Design Patterns, and to some extent Extreme Programming.

I think that Alexander's work can still provide us with many insights. His latest work on the Theory of Centers could help us create code structures that are much easier to work with and to evolve, provided that we learn to see our code in a new light. In the next few posts, my goal is to present this theory and suggest my own ideas on how it can be applied to software.

But before that, I would like to give you a broad overview of Alexander's previous work and its influence on the software design industry.

Design Patterns

Alexander was the one to come up with the concept of pattern – a proven, documented solution to a recurring network of problem “forces”. He first started writing about this in his 1964 book “Notes on the Synthesis of Form”, and proceeded to describe a full set of patterns thirteen years later in “A Pattern Language”. This book is an impressive piece of work: a catalog of 253 patterns that cover a vast array of construction topics, from the repartition of towns in a region down to the decoration of your living room.

The pattern thing was a hot topic in the software community in the mid-nineties. It was even difficult to find a computer science book without the “pattern” word on its cover – Analysis Patterns, CORBA Patterns, Patterns of Enterprise Application Architecture, Core J2EE Patterns, etc. Pattern conferences were also organized around the globe – OOPSLA, PLOP, EuroPLOP... The reason for this interest was that patterns seemed to be a very powerful way to document design expertise. Here was an opportunity to capture the hard-won knowledge of an expert developer and “encode” it into a predefined format, ready to be “uploaded” into the mind of a beginner!

The pinnacle of this quest was the publication of the “Design Patterns” book, by the so-called “Gang of Four” – Gamma, Helm, Johnson, Vlissides. The Design Patterns were a huge success because they successfully captured important object-oriented design techniques and helped many developers transition from the procedural paradigm to the object paradigm.

However, from an Alexandrian point of view, Design Patterns are not complete:

  • Design Patterns are more or less independent from each other. In contrast, Alexandrian patterns would complement each other to form a coherent language.
  • Design Patterns all focus on a group of classes, whereas a complete Alexandrian pattern language would cover many levels of scale, from the contents of a method to the organization of the internet.
  • The focus of Alexandrian patterns is to create some kind of “user experience”, what Alexander calls the “Quality Without A Name”. This quality is achieved in a building when its inhabitants feel completely at ease, free and fully alive. This is a human side to patterns that is not really visible in the Design Patterns book.

These limitations are not just a question of theoretical purity. The main problem is that by themselves the Design Patterns fall short of the original goal of patterns because they will not help a developer create a complete design, a whole picture. In Alexander’s terminology, Design Patterns are not a generative language. Therefore, the need for a complete pattern language for our field is as strong as ever.

The trouble is, the effort for creating such a language has been seriously undermined by the very success of the Design Patterns. People’s attention was drawn away from the original goal of the patterns community, letting them believe that patterns were just a documentation template in which you provide a name, a summary, an overview of design constraints and a long description.

The Design Patterns were thus a great leap forward for the OO community, but slightly less a success for the patterns community. We can find hints of this in the OOPSLA ‘99 conference, where a humorous “Show Trial of the Gang of Four" for "Crimes Against Computer Science” was organized.

Today, much of the momentum of the patterns movement has been lost. Jim Coplien, a leader of this field, made it clear in May 2000 when he stopped his periodic pattern articles in the C++ Report magazine with an article entitled “That’s All, Folks!”.

Extreme Programming

Among the leaders of the patterns movement were people such as Kent Beck, Ward Cunningham, Robert Martin, Martin Fowler… Rings a bell? These people were also the leaders of the Extreme Programming community. Moreover, XP was developed by a community hosted on the c2.com original wiki, which was initially home for the Portland Pattern Repository.

The link between XP and Alexander’s work is not as clear as for patterns. However, a quick look at Alexander’s building principles reveals many similarities with the ones behind XP. In his 1975 book “The Oregon Experiment”, Alexander describes his 6 principles in the context of the evolution of the Oregon University campus:

  • Organic Order: the design emerges through a process, not from an initial blueprint.
  • Incremental Growth: development occurs by small increments.
  • Patterns: a pattern language guides the planning process.
  • Diagnosis: development is guided by an analysis of the problems with the current design.
  • Participation: user involvement must prevail throughout the planning process
  • Coordination: working together benefits the campus as a whole.

If you omit the Patterns principle, all these principles could be used to describe an XP project. How surprising!

That being said, my point here is not to prove that XP is based on Alexander’s ideas. My point is rather to give you some background on the influence that Christopher Alexander has already had on our industry, and how his approach echoed, 30 years ago, many topics that are of interest to us today.

Why Alexander still matters

Alexander himself more or less put aside his work on patterns more than a decade ago, looking for a bigger fish. In 2004, he started publishing his main masterpiece: “The Nature of Order” (NoO), a four-volume description of a new encompassing approach to design based on a new theory: the Theory of Centers.

The way I see it, Alexander’s goal has always been to find a scientific and repeatable way of creating places where people feel at peace, free and alive. Patterns were his first attempt at capturing the design elements that can generate this quality, but they only gave mixed results when others tried to use them.

With his Theory of Centers, he goes a lot further. His main thesis is that wholeness, life, beauty, or just plain good design can be explained by a set properties of the physical structure of a design. The first volume of NoO, “The Phenomenon of Life”, describes these properties in detail. The second volume, “The Process of Creating Life”, explains how these properties are developed over time by an unfolding process.

Seeing how these physical properties translate into software is not easy. What do you do with the concepts of geometry, color, symmetry, or contrast, when you are dealing with code?

I think that over the years I have gathered a number of ideas that could help use these theories in our field. My goal for the next few posts is to share these ideas with you. In the next one, I will delve a little further in Alexander's work.

Further reading: