A pattern language is a way of expressing multiple solutions to complex problems.
Christopher Alexander coined the term Pattern Language to emphasize his belief that people had an innate ability for design that paralleled their ability to speak.
Chris's book A Timeless Way Of Building is the most instructive in describing his notion of a pattern language and its application to designing and building buildings and towns.
He defines a 'pattern' 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.
Pattern Language Rules:
- Think about your situation as a very rough hierarchy of ideas like a fractal, from the big picture to the details
- Put different ideas on different pages, named with a title that describes the idea in a few words
- On an Index page, order the ideas from large scale to details. This allows the entire PL to be linearized and printed out if necessary. It also vastly increases the usability of the system if (almost) all the pages are mentioned in a big list.
- For each Pattern, write a description of the problem, the solution, and an example. While writing, link to the Patterns that relate in the less, and more, specific direction.
- Graphics are good.
- If there are multiple people editing a PL, sign your work, e.g. Daniel MacKay. This also allows you to quickly get a list of your pages using the Reciprocal Link on every page.
- Give references where appropriate
- Put a link back to the Index Page at the bottom of each pattern.
You will probably need one window open for writing your page, and at least one more to jump back and forth between references.
Ward Cunningham created Wikiwiki as a way to express pattern languages effectively; the Portland Pattern Repository has hundreds of patterns for a variety of things, including many for extreme programming.