Programmers often run into coding problems that repeatedly arise during software design and implementation. Some of these problems are subtle, producing a cascading effect of small errors that can terminate in an eventual software crash. A software design pattern provides a solution to familiar interaction problems by providing a stable template that can be reused in different situations. It is not a complete code that can be plugged into a body of software as a whole, it is a circumstance that is likely to occur and the rules that solve the problem. A pattern language is a set of such patterns that combine to support an architectural style, a framework of related software systems.
Each pattern consists of three parts within a body of code; a context, a problem that routinely occurs, and a solution to that problem. Wherever the context occurs, the same rules must be applied to address the problem in that particular instance. Pattern languages are often developed specifically to support the building of large, complicated systems, documenting each potential problem and its solution into a knowledge for all programmers on the team to use and apply. This documentation includes situations, or context, in which a pattern may be used, the problem within the context that may arise without solution, and suggested solutions to address the problem. While some patterns are endemic to a single software architecture, others occur so commonly that developed pattern languages can be published or made available online as a resource to be used as a starting point for new project development.
To learn more about patterns and pattern languages:
- Design Patterns and Tips at sourcemaking.com
- The Diemen Repository of interaction Design Patterns
- Fowler, Martin: Design Patterns - a collection of articles by Martin Fowler, an object-oriented software specialist.
- A Pattern Language for Relational Databases and Smalltalk
- A Learning Guide to Design Patterns
- The Pattern of Not Using Patterns - This Retrospector.com article outlines the perils of not using patterns.
- A Big Ball of Mud, authored by Brian Foote and Joseph Yoder, is described as a haphazardly structured, sprawling, sloppy, duct-tape and bailing wire, spaghetti code jungle.
- Patterns for Scripted Applications
- The Pattern Language Network
- Creating a Pattern Language for Parallel Programming: the evolving view from Berkeley - Michael Linn's software blog.
- Special Issue Editorial on Patterns and Pattern Languages
- Patterns and Software: Essential Concepts and Terminology
- Pattern Languages for Interaction Design - In an interview with Will Evans, Erin Malone, Christian Crumlish, and Lucas Pettinati offer expert insight into patterning.
- Designing Social Interfaces: Principles, Patterns, and Practices for Improving the User Experience - a new wiki project in progress by Christian Crumlish and Erin Malone.