Matt's Blog

A Pattern Language

Thu Sep 14 20:57:39 EST 2006

Anyone who has studied an object-oriented programming language such as Java or C++ will have come across the "Design Patterns" concept at some stage. This was popularised by the "Group of Four" book of the same name, the basic concept being to identify common problems faced in programming tasks and use template solutions to solve them. A consistent approach to laying out the solutions and naming them appropriately enhances the value of this approach. This concept is based on an earlier work in the field of architecture, the book "A Pattern Language" by Christopher Alexander, Sara Ishikawa and Murray Silverstein et al.

"A Pattern Language" identifies 253 common design patterns come across in designing towns, neighbourhoods and individual buildings - and a key point is the patterns are described in this order from the scale of regions to the personal scale of the family home. This is an important concept because it emphasises the connection between patterns, as described in the preface:

Each pattern is connected to certain "larger" patterns which come above it in the language; and to certain "smaller" patterns which come below it in the language. The pattern helps to complete those larger patterns which are "above" it, and is itself completed by those smaller patterns which are "below" it.

There is a warning in the introductory chapters of "Design Patterns" against trying to impose a design pattern solution onto problems outside the domain of shuttling data around a computer program. This is in some sense valid, as can be evidenced by management consulting teams attempting to impose ideal information flow patterns on businesses consisting of falible human components, with variable success. However it is of interest that the original book deals not just with the architectural problems of designing a community, but also the psychological issues of forming a society.

The boundaries are fluid when considering architectural problems. It is not just the case of designing a building that "looks nice", the more fundamental problem is designing a working component of an overall society. Any system that interacts with humanity will either influence humans to conform to its constraints, or be influenced by humanity to change its behaviour. A city is a place where humans live, interact and obtain supplies necessary for survival. The machinery built to accomplish these tasks must take account of human psychology if it is to be successful.

Many futurist writers have extended this idea to consider how to design physical systems to bring out the best in humanity. R. Buckminster Fuller is the father of this mode of thought in the post-WWII era. More recently the science fiction author Bruce Sterling has considered the impact of pervasive computing on society, the novels "Distraction" and "Islands in the Net" being good examples of some possibilities.

A thought to finish on: Any system that interacts with humanity will influence or be influenced by humanity. The user interface is bidirectional.

[ideas] [notes]


code (24)

erlang (5)
ideas (19)
lisp (1)
me (11)
notes (4)
ocaml (1)
physics (45)
qo (7)
unix (6)
vim (3)