Edit: https://docs.google.com/a/codeaudit.com/document/d/1cnORUB5lZ3ArmxKwzLWX3mQii8bNoZqxlxm9RexFMOw/edit?usp=sharing

On Pattern Languages

“Nature uses only the longest threads to weave her patterns, so that each small piece of her fabric reveals the organization of the entire tapestry.” - Richard Feynman

Objects, systems, and similar structures recur as core elements in seemingly diverse fields such as sociology, architecture and programming. These structures are organized and defined by substructures called patterns. A pattern occurs within the design of an object, structure, or system when the designer must accommodate problems that naturally emerge in its design. Implied within the concept itself, such as “door”, is the inherent difficulties in its application as well as the solution’s suitability under the specific conditions in which the conflict appears.

Christopher Alexander, an architect and author, first mentioned the term in his seminal work, A Pattern Language. Although it was first applied onto an architectural context, its fundamental concepts are applicable to other disciplines, wherever systems or object are designed. His pattern language method is described in general terms and not necessarily restricted in its initial application to architecture.

Patterns originate from design processes within natural or human-made systems. A certain type called universal or elemental patterns, as the name suggests, occur in our daily lives on an experiential basis. Patterns such as “vehicle” and “government” possess a commonality in multi-disciplinary contexts like art, medicine, and social hierarchy.

The hierarchy in which these patterns are organized is referred to as a language. The metaphor is appropriate as a pattern language has a vocabulary, syntax, and grammar. The vocabulary refers to the compendium of applicable solutions to problems in a certain domain. For example, the vocabulary of architecture contains items such as rooms, windows, and buildings. Syntax and grammar refer to description of a pattern, much like a dictionary entry. The former showing the relationship of each to a greater network of other possible supplementary solutions and the latter describing how each react to problems or provide a benefit.

Having a common language in design enables the designer to tackle problems that are familiar to them and their expertise. Furthermore, it also allows leveraging of vocabulary, syntax, and grammar within the language to address others that may not be so familiar later on in the design process. Moreover, complete outsiders to the project can replicate this procedure and still produce reliable results.

Just as in written and oral language, pattern languages also lend themselves to improvisation. Through the process of decomposition, designers confront a certain problem and apply the appropriate solution. This leads to newer problems that must then be subsequently rectified with the application of another solution. This process is continuous, but progressive, as the issues become less concerning until they can be easily remedied independently of the pattern language model. Ultimately, the language’s syntax and grammar guides the designer towards the best design possible.

The significance of a design pattern is determined by its reproducibility. An important feature of a good design system is the holistic nature of contexts in which it can be useful. An effective pattern balances abstraction and generality in order to be functional within other frameworks, and also specificity, to be able to offer specialized instructions that correctly answer the needs of the respective problem against which it is being utilized. In architecture, a pattern labeled “A PLACE TO WAIT” could refer to bus stops and also hotel lobbies. These are two seemingly distinctive locations, yet both are fundamentally similar. Therefore, they are subject to the same problems and solutions.

Fundamentally, the value of a design pattern lies in its ability to be used in decision-making during the design process towards the most constructive outcome. Patterns are characterized by the problems they solve and the context where these problems occur and the circumstances in which their solutions can be suggested.

Usually, conflict arises from two or more forces that are needed in the operation of the design, but have similar or related functions, and thus, compete. In the design of a wireless communication system, potential patterns could be specifically, “WIRELESS TELEPHONE”, more generally, “WIRELESS DEVICE”, and closely related, “SECONDARY ACTIVITY”. It is conceivable that in a wireless communication system, the need to communicate, and also to perform other activities are both necessary forces, and therefore, compete. A conceptually-sound pattern permits a negotiation between competing forces to successfully facilitate their use.

The human element is inseparable from patterns and the systems within which they are used. We are both the designers and eventual users of designs that exist productively in our daily lives. Systems are constructed and processes are formulated meticulously through the design process, so that they may enrich our lives.

Alexander advocated for the importance of considering the end-users of a design, and the effect of which would be a user’s sense of unity in the form and function of the system. A modern example would be that software applications are assessed by its users through various criteria such as aesthetics and ease of use, and then rated accordingly. This feedback is vital in contributing to continuous progression of a design such that it would convey a distinct spirit to its user.

While Alexander described the complexity of a pattern language in his book, especially with regard to its interconnectedness, he also recognized the value of pattern catalogue. As opposed to a pattern language, where patterns are linked to another and the application of one would likely precede the application of another, a pattern catalogue functions just as well without inter-relationships in patterns. Pattern languages invariably result in hierarchical networks, which are indeed logically structured, but are not automatically the only proper mechanism to stimulate accurate and precise decision-making and achieve an adequate product.

Alexander’s pattern language approach in design has influenced the algorithms and methodology of other professional settings such as software engineering, politics, pedagogy, and even game theory. The reliance of humans on capable designs and inversely, its dependence on users for proper development supports the universality of his theory.

Pattern Form

Different books on pattern languages or design patterns use different constructs to describe a pattern. The patterns in this book follows this structure:

  • Name- This identifies the pattern and should be representative of the concept that it describes. The name should be a noun that should be easily usable within a sentence. We would like the pattern to be easily referenceable in conversation between practitioners.
  • Intent - Describes in a single concise sentence the meaning of the pattern.
  • Motivation- This section describes the reason why this pattern is needed in practice. Other pattern languages indicate this as the Problem. In our pattern language, we express this in a question or several questions and then we provide further explanation behind the question.
  • Sketch - This section provides alternative descriptions of the pattern in the form of an illustration or alternative formal expression. By looking at the sketch a reader may quickly understand the essence of the pattern.
  • Discussion - This is the main section of the pattern that goes in greater detail to explain the pattern. We leverage a vocabulary that we describe in the theory section of this book. We don’t go into intense detail into providing proofs but rather reference the sources of the proofs. How the motivation is addressed is expounded upon in this section. We also include additional questions that may be interesting topics for future research.
  • Known Uses - Here we review several projects or papers that have used this pattern.
  • Related Patterns - In this section we describe in a diagram how this pattern is conceptually related to other patterns. The relationships may be as precise or may be fuzzy, so we provide further explanation into the nature of the relationship. We also describe other patterns may not be conceptually related but work well in combination with this pattern.
  • Further Reading - We provide here some additional external material that will help in exploring this pattern in more detail.
  • References - To aid in reading, we include sources that are referenced in the text in the pattern.

References

https://en.wikipedia.org/wiki/Pattern_language

https://arxiv.org/abs/1512.00567 Rethinking the Inception Architecture for Computer Vision

https://arxiv.org/abs/1611.00847v2 Deep Convolutional Neural Network Design Patterns

http://cognitivemedium.com/tat/


Pattern Template