Pattern language

Last updated

A pattern language is an organized and coherent set of patterns, each of which describes a problem and the core of a solution that can be used in many ways within a specific field of expertise. The term was coined by architect Christopher Alexander and popularized by his 1977 book A Pattern Language .

Contents

A pattern language can also be an attempt to express the deeper wisdom of what brings aliveness within a particular field of human endeavor, through a set of interconnected patterns. Aliveness is one placeholder term for "the quality that has no name": a sense of wholeness, spirit, or grace, that while of varying form, is precise and empirically verifiable. [1] Alexander claims that ordinary people can use this design approach to successfully solve very large, complex design problems.

What is a pattern?

When a designer designs something – whether a house, computer program, or lamp – they must make many decisions about how to solve problems. A single problem is documented with its typical place (the syntax), and use (the grammar) with the most common and recognized good solution seen in the wild, like the examples seen in dictionaries. Each such entry is a single design pattern. Each pattern has a name, a descriptive entry, and some cross-references, much like a dictionary entry. A documented pattern should explain why that solution is good in the pattern's contexts.

Elemental or universal patterns such as "door" or "partnership" are versatile ideals of design, either as found in experience or for use as components in practice, explicitly described as holistic resolutions of the forces in recurrent contexts and circumstances, whether in architecture, medicine, software development or governance, etc. Patterns might be invented or found and studied, such as the naturally occurring patterns of design that characterize human environments. [2]

Like all languages, a pattern language has vocabulary, syntax, and grammar – but a pattern language applies to some complex activity other than communication. In pattern languages for design, the parts break down in this way:

This simplifies the design work because designers can start the process from any part of the problem they understand and work toward the unknown parts. At the same time, if the pattern language has worked well for many projects, there is reason to believe that even a designer who does not completely understand the design problem at first will complete the design process, and the result will be usable. For example, skiers coming inside must shed snow and store equipment. The messy snow and boot cleaners should stay outside. The equipment needs care, so the racks should be inside.

Many patterns form a language

Just as words must have grammatical and semantic relationships to each other in order to make a spoken language useful, design patterns must be related to each other in position and utility order to form a pattern language. Christopher Alexander's work describes a process of decomposition, in which the designer has a problem (perhaps a commercial assignment), selects a solution, then discovers new, smaller problems resulting from the larger solution. Occasionally, the smaller problems have no solution, and a different larger solution must be selected. Eventually all of the remaining design problems are small enough or routine enough to be solved by improvisation by the builders, and the "design" is done.

The actual organizational structure (hierarchical, iterative, etc.) is left to the discretion of the designer, depending on the problem. This explicitly lets a designer explore a design, starting from some small part. When this happens, it's common for a designer to realize that the problem is actually part of a larger solution. At this point, the design almost always becomes a better design.

In the language, therefore, each pattern has to indicate its relationships to other patterns and to the language as a whole. This gives the designer using the language a great deal of guidance about the related problems that must be solved.

The most difficult part of having an outside expert apply a pattern language is in fact to get a reliable, complete list of the problems to be solved. Of course, the people most familiar with the problems are the people that need a design. So, Alexander famously advocated on-site improvisation by concerned, empowered users, [3] [4] as a powerful way to form very workable large-scale initial solutions, maximizing the utility of a design, and minimizing the design rework. The desire to empower users of architecture was, in fact, what led Alexander to undertake a pattern language project for architecture in the first place.

Design problems in a context

An important aspect of design patterns is to identify and document the key ideas that make a good system different from a poor system (that may be a house, a computer program or an object of daily use), and to assist in the design of future systems. The idea expressed in a pattern should be general enough to be applied in very different systems within its context, but still specific enough to give constructive guidance.

The range of situations in which the problems and solutions addressed in a pattern apply is called its context. An important part in each pattern is to describe this context. Examples can further illustrate how the pattern applies to very different situation.

For instance, Alexander's pattern "A PLACE TO WAIT" addresses bus stops in the same way as waiting rooms in a surgery, while still proposing helpful and constructive solutions. The "Gang-of-Four" book Design Patterns by Gamma et al. proposes solutions that are independent of the programming language, and the program's application domain.

Still, the problems and solutions described in a pattern can vary in their level of abstraction and generality on the one side, and specificity on the other side. In the end this depends on the author's preferences. However, even a very abstract pattern will usually contain examples that are, by nature, absolutely concrete and specific.

Patterns can also vary in how far they are proven in the real world. Alexander gives each pattern a rating by zero, one or two stars, indicating how well they are proven in real-world examples. It is generally claimed that all patterns need at least some existing real-world examples. It is, however, conceivable to document yet unimplemented ideas in a pattern-like format.

The patterns in Alexander's book also vary in their level of scale – some describing how to build a town or neighbourhood, others dealing with individual buildings and the interior of rooms. Alexander sees the low-scale artifacts as constructive elements of the large-scale world, so they can be connected to a hierarchic network.

Balancing of forces

A pattern must characterize the problems that it is meant to solve, the context or situation where these problems arise, and the conditions under which the proposed solutions can be recommended.

Often these problems arise from a conflict of different interests or "forces". A pattern emerges as a dialogue that will then help to balance the forces and finally make a decision.

For instance, there could be a pattern suggesting a wireless telephone. The forces would be the need to communicate, and the need to get other things done at the same time (cooking, inspecting the bookshelf). A very specific pattern would be just "WIRELESS TELEPHONE". More general patterns would be "WIRELESS DEVICE" or "SECONDARY ACTIVITY", suggesting that a secondary activity (such as talking on the phone, or inspecting the pockets of your jeans) should not interfere with other activities.

Though quite unspecific in its context, the forces in the "SECONDARY ACTIVITY" pattern are very similar to those in "WIRELESS TELEPHONE". Thus, the competing forces can be seen as part of the essence of a design concept expressed in a pattern.

Patterns contain their own rationale

Usually a pattern contains a rationale referring to some given values. For Christopher Alexander, it is most important to think about the people who will come in contact with a piece of architecture. One of his key values is making these people feel more alive. He talks about the "quality without a name" (QWAN).

More generally, we could say that a good system should be accepted, welcomed and happily embraced as an enrichment of daily life by those who are meant to use it, or – even better – by all people it affects. For instance, when discussing a street café, Alexander discusses the possible desires of a guest, but also mentions people who just walk by.

The same thinking can be applied to technical devices such as telephones and cars, to social structures like a team working on a project, or to the user interface of a computer program. The qualities of a software system, for instance, could be rated by observing whether users spend their time enjoying or struggling with the system.

By focusing on the impacts on human life, we can identify patterns that are independent from changing technology, and thus find "timeless quality" (Alexander).

Generic structure and layout

Usually the author of a pattern language or collection chooses a generic structure for all the patterns it contains, breaking each into generic sections like context, problem statement, solution etc.

Christopher Alexander's patterns, for instance, each consist of a short name, a rating (up to two '*' symbols), a sensitizing picture, the context description, the problem statement, a longer part of text with examples and explanations, a solution statement, a sketch and further references. This structure and layout is sometimes referred to as the "Alexandrian form".

Alexander uses a special text layout to mark the different sections of his patterns. For instance, the problem statement and the solution statement are printed in bold font, the latter is always preceded by the "Therefore:" keyword. Some authors instead use explicit labels, which creates some degree of redundancy.

Meaningful names

When design is done by a team, pattern names will form a vocabulary they can share. This makes it necessary for pattern names to be easy to remember and highly descriptive. Some examples from Alexander's works are WINDOW PLACE (helps define where windows should go in a room) and A PLACE TO WAIT (helps define the characteristics of bus stops and hospital waiting rooms, for example).

Aggregation in an associative network (pattern language)

A pattern language, as conceived by Alexander, contains links from one pattern to another, so when trying to apply one pattern in a project, a designer is pushed to other patterns that are considered helpful in its context.

In Alexander's book, such links are collected in the "references" part, and echoed in the linked pattern's "context" part – thus the overall structure is a directed graph. A pattern that is linked to in the "references" usually addresses a problem of lower scale, that is suggested as a part of the higher-scale problem. For instance, the "PUBLIC OUTDOOR ROOM" pattern has a reference to "STAIR SEATS".

Even without the pattern description, these links, along with meaningful names, carry a message: When building a place outside where people can spend time ("PUBLIC OUTDOOR ROOM"), consider to surround it by stairs where people can sit ("STAIR SEATS"). If you are planning an office ("WORKSHOPS AND OFFICES"), consider to arrange workspaces in small groups ("SMALL WORKING GROUPS"). Alexander argues that the connections in the network can be considered even more meaningful than the text of the patterns themselves.

The links in Alexander's book clearly result in a hierarchic network. Alexander draws a parallel to the hierarchy of a grammar – that is one argument for him to speak of a pattern language.

The idea of linking is generally accepted among pattern authors, though the semantic rationale behind the links may vary. Some authors, however, like Gamma et al. in Design Patterns , make only little use of pattern linking – possibly because it did not make that much sense for their collection of patterns. In such a case we would speak of a pattern catalogue rather than a pattern language. [5]

Usage

Alexander encouraged people who used his system to expand his language with patterns of their own. In order to enable this, his books do not focus strictly on architecture or civil engineering; he also explains the general method of pattern languages. The original concept for the book A Pattern Language was that it would be published in the form of a 3-ring binder, so that pages could easily be added later; this proved impractical in publishing. [6] The pattern language approach has been used to document expertise in diverse fields. Some examples are architectural patterns, computer science patterns, interaction design patterns, pedagogical patterns, pattern gardening, social action patterns, and group facilitation patterns. The pattern language approach has also been recommended as a way to promote civic intelligence by helping to coordinate actions for diverse people and communities who are working together on significant shared problems. [7] Alexander's specifications for using pattern languages as well as creating new ones remain influential, and his books are referenced for style by experts in unrelated fields.

It is important to note that notations such as UML or the flowchart symbol collection are not pattern languages. They could more closely be compared to an alphabet: their symbols could be used to document a pattern language, but they are not a language by themselves. A recipe or other sequential set of steps to be followed, with only one correct path from start to finish, is also not a pattern language. However, the process of designing a new recipe might benefit from the use of a pattern language.

Simple example of a pattern

Origin

Christopher Alexander, an architect and author, coined the term pattern language. [3] He used it to refer to common problems of the design and construction of buildings and towns and how they should be solved. The solutions proposed in the book include suggestions ranging from how cities and towns should be structured to where windows should be placed in a room.

The framework and philosophy of the "pattern language" approach was initially popularized in the book A Pattern Language that was written by Christopher Alexander and five colleagues at the Center for Environmental Structure in Berkeley, California in the late 1970s. While A Pattern Language contains 253 "patterns" from the first pattern, "Independent Regions" (the most general) to the last, "Things from Your Life", Alexander's book The Timeless Way of Building goes into more depth about the motivation and purpose of the work. The following definitions of "pattern" and "pattern language" are paraphrased from A Pattern Language: [3]

"A pattern is a careful description of a perennial solution to a recurring problem within a building context, describing one of the configurations that brings life to a building. Each pattern describes a problem that occurs over and over again in our environment, and then describes the core solution to that problem, in such a way that you can use the solution a million times over, without ever doing it the same way twice." [3]

A pattern language is a network of patterns that call upon one another. Patterns help us remember insights and knowledge about design and can be used in combination to create solutions.

Application domains

Christopher Alexander's idea has been adopted in other disciplines, often much more heavily than the original application of patterns to architecture as depicted in the book A Pattern Language . [3] Examples since the 1990s include software design patterns in software engineering and, more generally, architectural patterns in computer science, as well as interaction design patterns. Since the late 1990s, pedagogical patterns have been used to document good practices in teaching. [8] Since at least the mid-2000s, the idea of pattern language was introduced into systems architecture design [9] [10] and Design science (methodology) patterns in a book authored by Vijay Vaishnavi and William Kuechler with 66 patterns; [11] the second revised and expanded edition of this book has been published in 2015 with 84 patterns. [12] The book Liberating Voices: A Pattern Language for Communication Revolution, containing 136 patterns for using information and communication to promote sustainability, democracy and positive social change, was published in 2008 along with a website containing even more patterns. [13] The deck "Group Works: A Pattern Language for Bringing Life to Meetings and Other Gatherings" was published in 2011. [14] The idea of a pattern language has also been applied in permaculture design. [15]

Ward Cunningham, the inventor of wiki, coauthored a paper with Michael Mehaffy arguing that there are deep relationships between wikis and pattern languages, and that wikis "were in fact developed as tools to facilitate efficient sharing and modifying of patterns". [16]

See also

Related Research Articles

A design pattern is the re-usable form of a solution to a design problem. The idea was introduced by the architect Christopher Alexander and has been adapted for various other disciplines, particularly software engineering.

<span class="mw-page-title-main">Software architecture</span> High level structures of a software system

Software architecture is the set of structures needed to reason about a software system and the discipline of creating such structures and systems. Each structure comprises software elements, relations among them, and properties of both elements and relations.

The facade pattern is a software design pattern commonly used in object-oriented programming. Analogous to a façade in architecture, it is an object that serves as a front-facing interface masking more complex underlying or structural code. A facade can:

In computer programming, the strategy pattern is a behavioral software design pattern that enables selecting an algorithm at runtime. Instead of implementing a single algorithm directly, code receives runtime instructions as to which in a family of algorithms to use.

In software engineering, a design pattern describes a relatively small, well-defined aspect of a computer program in terms of how to write the code.

Software design is the process of conceptualizing how a software system will work before it is implemented or modified. Software design also refers to the direct result of the design process – the concepts of how the software will work which consists of both design documentation and undocumented concepts.

Pattern in architecture is the idea of capturing architectural design ideas as archetypal and reusable descriptions. The term pattern in this context is usually attributed to Christopher Alexander, an Austrian born American architect. The patterns serve as an aid to design cities and buildings. The concept of having collections of "patterns", or typical samples as such, is much older. One can think of these collections as forming a pattern language, whereas the elements of this language may be combined, governed by certain rules.

User-centered design (UCD) or user-driven development (UDD) is a framework of process in which usability goals, user characteristics, environment, tasks and workflow of a product, service or process are given extensive attention at each stage of the design process. These tests are conducted with/without actual users during each stage of the process from requirements, pre-production models and post production, completing a circle of proof back to and ensuring that "development proceeds with the user as the center of focus." Such testing is necessary as it is often very difficult for the designers of a product to understand intuitively the first-time users of their design experiences, and what each user's learning curve may look like. User-centered design is based on the understanding of a user, their demands, priorities and experiences and when used, is known to lead to an increased product usefulness and usability as it delivers satisfaction to the user. User-centered design applies cognitive science principles to create intuitive, efficient products by understanding users' mental processes, behaviors, and needs.

Product design is the process of creating new products for sale businesses to its customers. It involves the generation and development of ideas through a systematic process that leads to the creation of innovative products. Thus, it is a major aspect of new product development.

The concept of design paradigms derives from the rather ambiguous idea of paradigm originating in the sociology of science, which carries at least two main meanings:

<i>A Pattern Language</i> Book by Christopher Alexander

A Pattern Language: Towns, Buildings, Construction is a 1977 book on architecture, urban design, and community livability. It was authored by Christopher Alexander, Sara Ishikawa and Murray Silverstein of the Center for Environmental Structure of Berkeley, California, with writing credits also to Max Jacobson, Ingrid Fiksdahl-King and Shlomo Angel. Decades after its publication, it is still one of the best-selling books on architecture.

<i>The Oregon Experiment</i> 1975 book

The Oregon Experiment is a 1975 book by Christopher Alexander and collaborators Murray Silverstein, Shlomo Angel, Sara Ishikawa, and Denny Abrams. It describes an experimental approach to campus community planning at the University of Oregon, in Eugene, Oregon which resulted in a theory of architecture and planning described in the group's later published and better-known volumes A Pattern Language and The Timeless Way of Building.

Design methods are procedures, techniques, aids, or tools for designing. They offer a number of different kinds of activities that a designer might use within an overall design process. Conventional procedures of design, such as drawing, can be regarded as design methods, but since the 1950s new procedures have been developed that are more usually grouped together under the name of "design methods". What design methods have in common is that they "are attempts to make public the hitherto private thinking of designers; to externalise the design process".

Interaction design patterns are design patterns applied in the context human-computer interaction, describing common designs for graphical user interfaces.

Design thinking refers to the set of cognitive, strategic and practical procedures used by designers in the process of designing, and to the body of knowledge that has been developed about how people reason when engaging with design problems.

General Responsibility Assignment Software Patterns, abbreviated GRASP, is a set of "nine fundamental principles in object design and responsibility assignment" first published by Craig Larman in his 1997 book Applying UML and Patterns.

An architectural pattern is a general, reusable resolution to a commonly occurring problem in software architecture within a given context. The architectural patterns address various issues in software engineering, such as computer hardware performance limitations, high availability and minimization of a business risk. Some architectural patterns have been implemented within software frameworks.

Object-oriented design (OOD) is the process of planning a system of interacting objects to solve a software problem. It is a method for software design. By defining classes and their functionality for their children, each object can run the same implementation of the class with its state.

Software analysis patterns or analysis patterns in software engineering are conceptual models, which capture an abstraction of a situation that can often be encountered in modelling. An analysis pattern can be represented as "a group of related, generic objects (meta-classes) with stereotypical attributes, behaviors, and expected interactions defined in a domain-neutral manner."

<span class="mw-page-title-main">Nikos Salingaros</span> Greek-Australian-American mathematician, architecture theorist and polymath

Nikos Angelos Salingaros is a mathematician and polymath known for his work on urban theory, architectural theory, complexity theory, and design philosophy. He has been a close collaborator of the architect Christopher Alexander, with whom Salingaros shares a harsh critical analysis of conventional modern architecture. Like Alexander, Salingaros has proposed an alternative theoretical approach to architecture and urbanism that is more adaptive to human needs and aspirations, and that combines rigorous scientific analysis with deep intuitive experience.

References

  1. Alexander, Christopher (1979). The Timeless Way of Building. Oxford University Press. ISBN   978-0-19-502402-9.
  2. Henshaw, J. Guiding Patterns of Naturally Occurring Design: Elements. PURPLSOC 2015 proceedings, July 3-5 2015 Krems, Austria PURPLSOC meeting on the many open scientific questions, e.g. regarding the theoretical background of patterns and the practical implementation of pattern methods in research and teaching.
  3. 1 2 3 4 5 Alexander, Christopher (1977). A Pattern Language: Towns, Buildings, Construction . Oxford University Press, USA. p.  1216. ISBN   978-0-19-501919-3.
  4. Alexander, Christopher, The Oregon Project
  5. Andy Dearden, Janet Finlay (January 2006). "Pattern Languages in HCI: A critical review". Human Computer Interaction. 21 (1).
  6. Portland Urban Architecture Research Laboratory Symposium 2009, presentation by 4 of 6 original authors of A Pattern Language.
  7. For additional discussion of motivation and rationale as well as examples and experiments, see: Schuler, Douglas. "Choosing success: pattern languages as critical enablers of civic intelligence" (PDF). publicsphereproject.org. Portland Urban Architecture Research Laboratory Conference, Portland, OR, 2009. Retrieved 6 March 2017.
  8. Fincher, Sally (September 1999). "Analysis of design: an exploration of patterns and pattern languages for pedagogy". Journal of Computers in Mathematics and Science Teaching. 18 (3): 331–348.
  9. Cloutier, Robert J.; Verma, Dinesh (June 2007). "Applying the concept of patterns to systems architecture". Systems Engineering. 10 (2): 138–154. doi:10.1002/sys.20066. S2CID   16218191.
  10. Cloutier, Robert J.; Muller, Gerrit; Verma, Dinesh; Nilchiani, Roshanak; Hole, Eirik; Bone, Mary (March 2010). "The concept of reference architectures". Systems Engineering. 13 (1): 14–27. doi:10.1002/sys.20129. S2CID   10835558.
  11. Vaishnavi, V.K. and Kuechler, W. Design Science Research Methods and Patterns, Auerbach Publications, October 2007, 248 pages
  12. Vaishnavi. V.K. and Kuechler, W. Design Science Research Methods and Patterns, 2nd Edition, CRC Press, 2015, 415 pages
  13. "Liberating Voices Pattern Language". publicsphereproject.org. Retrieved 6 March 2017.
  14. "Group Pattern Language Project". groupworksdeck.org. Retrieved 6 March 2017.
  15. Jacke, Dave; Toensmeier, Eric (2005). "A Forest Garden Pattern Language". Edible Forest Gardens, Volume II: Ecological Design And Practice for Temperate-Climate Permaculture. White River Junction, VT: Chelsea Green Publishing. pp. 63–139. ISBN   1-931498-80-6.
  16. Cunningham, Ward; Mehaffy, Michael W. (2013). "Wiki as pattern language". Proceedings of the 20th Conference on Pattern Languages of Programs, October 23–26, 2013, Monticello, Illinois. PLoP '13. Corryton, TN: The Hillside Group. pp. 32:1–32:14. ISBN   9781941652008.

Further reading

About patterns in general

Online pattern collections