Tuesday, June 30, 2015

A Pattern Language is an attempt to express the deeper wisdom of what brings aliveness within a particular field of human endeavor.Pattern has a few meanings, it’s usually about repeating artistic or decorative design: a paisley pattern; or a natural or accidental arrangement or sequence. A plan, diagram, or model to be followed in making things. A consistent, characteristic form, style, or method. Or a composite of traits or features characteristic of an individual or a group., etc. (freedictionary.com) When patterns work together to solve problems in a particular area, these patterns are called a pattern language. The people learn a set of languages, and then apply several synergistically to produce a solution.

A pattern language is "about" the relationships between patterns - particularly the way you can navigate from pattern to pattern to learn about a problem space and to apply different solutions in combination. In particular, the pattern language tells you how one pattern "leads to" another, in the same way that one clause in a natural language might lead to another. But the person who reads and understands the pattern language still needs to decide how to apply that language to describe a set of problems and solutions. There are two approaches to patterns that are suited to different people.

- Learning a growing set of patterns so you can select one when it is useful.

- Learning what makes a good pattern good so you can derive your own solutions in each new situation.

Pattern language is an extension of the notion of ubiquitous language. Pattern Language would apply to a set of patterns implemented in a framework that you don't have to leave when creating your project. In other words, if the framework implements a set of patterns well enough that you can stay in the framework and concentrate on your business logic. Pattern language is an extension of the notion of ubiquitous language. As much as developers and users need a common vocabulary for getting domain, solution architects, developers and SMEs need a common vocabulary in the solution domain. Patterns map that vocabulary to the corresponding technical design and implementation. A pattern language provides an even-more (not less) meta level of work. In a pattern language, patterns often reference each other and using one pattern may add or remove applicability to another - they may interoperate. The patterns are grouped and sometimes pathed within an area of expertise (multiprocessing, GUI design, organizing people in a company) so that people without extensive experience can pick up the language and sometimes solve problems in unsurprisingly wise ways.

While frameworks are useful, the existence of a framework is independent of patterns and pattern languages. You can often describe a well-designed framework in terms of the patterns that are embodied in its implementation, and the patterns that might help you understand how to use and adapt it. It's possible that a pattern language might help you understand the framework. Meanwhile, a framework might capture certain paths through a pattern language, but if the language is truly generative, then it should be capable of describing multiple possible frameworks that respond to the same domain. An implementation of a pattern is not the pattern, and a framework of pattern implementations is not a pattern language. Programming languages evolve towards handling business objects (customer data and order data) more directly than dealing with setting a property on the customer object or serializing it and sending to a process for storing. The frameworks are useful, because they tend to abstract towards dealing with business logic directly.

Each pattern is useful to address some specific problem around fault tolerance / resilience; but resilience is a pretty broad topic and there's plenty of room to get lost in the details. Patterns are good in practice and definitely intellectually stimulating, someone ties the patterns together so you can navigate among them. But keep an eye on getting too bogged down in the minutiae, especially if it starts to hinder delivering valuable working software. The completeness of the language would take multiple patterns and the introduction of a framework would be a way to accomplish this. Language is what being used when seeing a pattern frequently enough to assign it words.

The language is the system of rules that say how patterns can be combined in ways that "make sense" syntactically and add insight semantically. A pattern language is a set of patterns that work together to solve the conflicting forces within a system. A human language is a system of rules: syntax, semantics, grammar, that allows us to generate meaningful statements, such that multiple people can understand that meaning in ways that are sufficiently similar, that we have communicated with one another. More abstractly, a language is generative in the sense that we can use the language to generate meaningful sentences, paragraphs, and books. If we have a set of patterns that bear some relationship to one another - usually because they are in some common domain, then we can compose those patterns to generate a larger design or architecture, in much the same way that human languages can generate sentences or paragraphs.

A Pattern Language is an attempt to express the deeper wisdom of what brings aliveness within a particular field of human endeavor, through a set of interconnected expressions arising from that wisdom. A pattern language can generate different solutions, for a given solution is the combination of the inner forces acting on the system with the pattern language applied to solve that particular combination of forces. Aliveness is one placeholder term for the quality, a sense of wholeness, spirit, or grace, while of varying form, is precise and empirically verifiable.