Christopher Alexander inspired Kent Beck and Ward Cunningham to write their first small pattern language in 1987 for designing user interfaces. In 1993, Kent Beck and Grady Booch sponsored a mountain retreat in Colorado which was the start of the nonprofit Hillside Group. The original vision of this group was to help uplift the software community through pattern writing. Toward this end, the Hillside Group started the Pattern Languages of Programming (PLoP) conference series; variations are now being held around the globe. PLoP conferences follow a highly collaborative style based on “shepherding” before submission and peer based feedback workshops during the conference. Many successful pattern papers and books have emerged from this process.
In 1994, Erich Gamma and his colleagues known as the Gang of Four (GoF) published "Design Patterns: Elements of Reusable Object-Oriented Software" which launched the concept of patterns to a broader audience. It is interesting to note that in a discipline that is known to experience continual change, these principles are still useful and this book continues to sell more than 20 years after publication. This success of patterns within the software community led to a lot of early hype about patterns.
As noted, patterns in software engineering draw inspiration from Christopher Alexander, who is recognized as an important building and urban planning architect (Salingaros, 2000). Alexander used patterns to document successful design practices in the architecture profession. His focus on proven solutions rather than new and unique ones was motivated by his observation that modern day buildings and towns do not approach the beauty of the historical past. He notes that the vast majority of architecture since the end of World War II has been dehumanizing, of poor quality, and lacking all sense of beauty and human feeling (O’Callaghan, 2001). This created his distaste for simply fashionable architecture and a preoccupation with the search for a design approach that generates beautiful structures (Grabow, 1983).
Patterns are generally defined as a three part construct. First comes the 'context'; under what conditions does this pattern hold. Next are a 'system of forces'. In many ways it is natural to think of this as the 'problem' or 'goal'. The third part is the 'solution'; a configuration that balances the system of forces or solves the problems presented. Alexander explains that a pattern is both a thing and a process for creating that thing. It describes what you have to do to generate the entity which it define
Christopher Alexander coined the term "PatternLanguage" to emphasize his belief that people had an innate ability for design that paralleled their ability to speak. Chris's book A TimelessWayOfBuilding is the most instructive in describing his notion of a pattern language and its application to designing and building buildings and towns. A pattern language is first a set of patterns, but second it can impose some ordering constraints when the patterns contain pointers to patterns that help complete them. But this is not typically enough. Alexander uses the idea of a “sequence” to teach designers and builders how to construct a coherent artifact. Without some ideas on how to sequence one’s design thoughts, the underlying pattern language is likely to be mostly a diagnostic tool. For an extensive example of the application of patterns, see Chris's other book A Pattern Language. Here he presents over 250 individual patterns that go into the making of successful towns and buildings (in the context of a western, even North American, environment).
Many people accept the definition of a pattern as a proven solution to a problem in a context. Each one documents a reusable solution, encapsulates knowledge about successful practices, and provides information about its usefulness and tradeoffs. Some patterns have been catalogued into collections or pattern libraries. Examples include http://developer.yahoo.com/patterns and www.securitypatterns.org . Many companies, including Amazon, Google, IBM, Lucent, Microsoft, Oracle, and Siemens, have written similar pattern collections, some of which are available in books and on websites.
There have been many collections of patterns written, often where authors attempted to weave them into a language. Connected sets of interrelated patterns building on each other can start to form a pattern language, which support a generative, domain specific development process [20 years]. More recently there has been a lot of work toward building pattern languages and improving pattern mining and validation. For example, the Iba lab has outlined Patterns 3.0 pattern languages [IBA] for guiding human action. Additionally the IBA lab has done novel work on pattern mining [refs]. Another example can be found in the Fearless Change patterns which began to build a process for evolving an organization during times of change. Fearless Change began to connect their individual patterns into a language by resolving negative consequences in each pattern with a recommendation for new patterns to use. This is the beginning of sequencing for their patterns.
Patterns are also being successfully used in other fields, such as design, media, arts, IT, management, innovation, music, pedagogy, social activism, social innovation, and grassroots movements.
To find out more about what a pattern is, click on the links below.
- Patterns and Software: Essential Concepts and Terminology
A good introduction written by Brad Appleton - Doug Lea's contributed checklist to help write patterns.
- A Pattern Language for Pattern Writing by Gerard Meszaros and Jim Doble.
- Learning Guide To Design Patterns
How to study and setup a group that studies Design Patterns, by Joshua Kerievsky.