A Pattern Language and Software Design Patterns
A reflection on A Pattern Language in software design patterns perspective
The creator of design patterns and pattern languages, Christopher Alexander, explains “Each pattern describes a problem which occurs over and over again in our environment, and then describes the core of the solution to that problem, in such a way that you can use this solution a million times over, without ever doing it the same way twice.” (1977, p. x).
Considering software design pattern is an adaptation of the concept above, it is not surprising that the same description applies to it; although the concept originates in disciplines of architecture and urban design. This is one of the main reasons that reading A Pattern Language gave me the joy and excitement of two (in-a-way)very similar and separate disciplines that both are very dear to my heart: software development and urbanism.
Alexander said: “no pattern is an isolated entity. Each pattern can exist in the world, only to the extent that is supported by other patterns: the larger patterns in which it is embedded, the patterns of the same size that surround it, and the smaller patterns which are embedded in it.” (1977, p. xiii). Contrary to what Alexander said (at least, as far as I observed), software design patterns often are thought as separate entities and separate solutions for separate (kind of) problems. Therefore reading Alexander opened up the subject to me for reconsideration. Looking at the problems and solutions this way (that they are interconnected and generate and necessitate others), I can see how I can understand and use software design patterns as well as any solution pattern better. I guess this can be simplified as this: Patterns (reoccuring problems and solutions), emerge in patterns.
Alexander continues as: “This is a fundamental view of the world. It says that when you build a thing you cannot merely build that thing in isolation, but also must repair the world around it, and within it, so that the larger world at that one place becomes more coherent, and more whole; and the thing which you make takes its place in the web of nature, as you make it.” (1977, p. xiii). I think this argument may apply to software development (and software design patterns) even more than the original subject (architecture and urban design) because of the nature of the subject matter itself and the process of its repair as in physical/virtual. There should be patterns of repair/refactoring/maintenance since what is broken and what is fixed/changed affect others around it, and require other changes in them as well.
Concept of having patterns and a pattern language strikes me as both liberating and structured since it is not seen as a sealed deal by Alexander. He says “in a healthy society there will be many pattern languages as there are people -even though these languages are shared and similar” (1977, p. xvi).
Alexander, C. (1977). A pattern language: towns, buildings, construction. Oxford university press.