Most software developers credit the book Design Patterns: Elements of Reusable Object-Oriented Software, published in 1994, as the birth of patterns. no The term was coined by Christopher Alexander in 1977.
Rainer Grimm has been working as a software architect, team leader and training manager for many years. He likes to write articles on the programming languages C++, Python and Haskell, but also likes to speak frequently at specialist conferences. On his blog Modernes C++ he deals intensively with his passion for C++.
I begin my historical detour with important people and their books. But this detour is by no means complete.
History of Patterns
The idea of the pattern goes back to Christopher Alexander. In his books “Notes on the Synthesis of Form, A City is Not a Tree”, “The Timeless Way of Building”, “The Oregon Experiment”, “The Nature of Order” and most notably in his book “A Pattern Language: Town, Buildings, Construction” Terms such as Pattern, Forces or Pattern Languages. Christopher Alexander was an architect who focused on interior design but also urban planning. His main concern was to create an architecture that is based on people’s needs. He developed more than 250 templates for design problems with his colleagues at the Center for Environmental Structure in Berkley. Each consisted of a problem, a discussion of the problem with an illustration, and a solution. I guess that sounds familiar to most.
Ward Cunningham and Kent Beck
Ward Cunningham and Kent Beck were inspired by Christoph Alexander’s ideas and transferred them to software development. In 1987 they published their book Using Pattern Languages for Object-Oriented Programs, a pattern language intended to simplify user interface development in Smalltalk. They created the first pattern system for designing user interfaces. Here are four of their patterns:
- Window-per-Task: A separate window for each task
- Few-Panes: Develop a separate pane in the window for each view of the task
- Standard Panes: Design of the functional areas according to the same principles
- Nouns and Verbs: Action instructions (verbs) belong in the menu
I want to emphasize that Ward Cunningham and Kent Beck are two of the most influential minds in software development.
- Pioneer of software design patterns
- wrote the unit test framework sUnit for Smalltalk
- developed the Junit unit test framework for Java together with Erich Gamma
- popularized CRC charts along with Ward Cunningham
- developed Extreme Programming (XP)
James Coplien published the book “Advanced C++ Programming Styles and Idioms” in 1991. His book is a catalog of C++ idioms like
- Handle/Body: Separation of interface and implementation
- Envelope/Letter: ties together the common semantics of interface and implementation
- Virtual Constructor: Building a hierarchy of a known abstract type but an unknown concrete type
- Concrete data type: determines whether an object should be created on the heap or in the current scope
- Algebraic Hierarchy: structures the class according to algebraic types
- Non-hierarchical addition: handles arithmetic operations between types that cannot be converted to the other type
Erich Gamma received his doctorate in Zurich in 1991 on the use of patterns in software development: “Object-oriented software development using ET++ as an example”. ET++ is a portable C++ class library for developing interactive graphical applications. Gamma’s dissertation became the basis of his co-authored book, Design Patterns: Elements of Reusable Object-Oriented Software, with three co-authors. The three co-authors are Richard Helm, Ralph Johnson and John Vlissides. All four together form the well-known Gang of Four (GoF).
Erich Gamma is also known for developing the Junit Unit Test Framework for Java together with Kent Beck and for leading the development of the Eclipse Framework.
The Hillside Group
In 1993, Grady Booch and Kent Beck invited several protagonists from the object-oriented scene to a mountain cabin in Colorado. One of the themes was the merging of Christopher Alexander’s ideas with the more recent work of Erich Gamma as the basis for Design Patterns. The formation of a non-profit organization dedicated to software patterns was named Hillside Group. To this day, this group plays a central role in the pattern community. It has resulted in numerous conferences on the subject, the so-called PLoPs (Pattern Languages of Programming). If you’re looking for more information on patterns, books, or conferences on the topic, check out the Hillside Group.
Design Patterns: Elements of reusable object-oriented software
In 1994 Erich Gamma, Richard Helm, Ralph Johnson and John Vlissides published. her seminal book Design Patterns: Elements of Reusable Object-Oriented Software. It contains 23 object-oriented patterns, divided into creational, structural, and behavioral patterns. This book marks the beginning of the worldwide spread of patterns and is considered the most important book on software design. To date, more than 500,000 copies have been sold.
Pattern-Oriented Software Architecture, Volume 1
Frank Buschmann, Regine Meunier, Hans Rohnert, Peter Sommerlad and my Heise blog colleague Michael Stal from Siemens AG published the book “Pattern-Oriented Software Architecture, Volume 1” in 1996. Her highly influential book represents the evolution of the pattern approach into a system of patterns that can be used to describe and document large applications. Pattern-Oriented Software Architecture (POSA) consists of 17 architectural patterns, design patterns, and idioms. The entire POSA series, published from 1996 to 2007, spans five volumes.
In my next article I will present the different classifications of patterns in the books “Design Patterns: Elements of Reusable Object-Oriented Software” and “Pattern-Oriented Software Architecture, Volume 1”.