{"id":6400,"date":"2022-07-05T20:39:55","date_gmt":"2022-07-05T20:39:55","guid":{"rendered":"https:\/\/www.modernescpp.com\/index.php\/history-and-classification-of-patterns\/"},"modified":"2023-06-26T09:02:53","modified_gmt":"2023-06-26T09:02:53","slug":"history-and-classification-of-patterns","status":"publish","type":"post","link":"https:\/\/www.modernescpp.com\/index.php\/history-and-classification-of-patterns\/","title":{"rendered":"The History of Patterns"},"content":{"rendered":"<p>Most software developers assume that the book &#8220;Design Patterns: Elements of Reusable Object-Oriented Software&#8221;, published in 1994, stands for the birth of patterns. No. The term was coined by Christopher Alexander in 1977.<\/p>\n<p><!--more--><\/p>\n<p>&nbsp;<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\" size-full wp-image-6392\" src=\"https:\/\/www.modernescpp.com\/wp-content\/uploads\/2022\/07\/history.png\" alt=\"history\" width=\"650\" height=\"324\" style=\"display: block; margin-left: auto; margin-right: auto;\" srcset=\"https:\/\/www.modernescpp.com\/wp-content\/uploads\/2022\/07\/history.png 1237w, https:\/\/www.modernescpp.com\/wp-content\/uploads\/2022\/07\/history-300x149.png 300w, https:\/\/www.modernescpp.com\/wp-content\/uploads\/2022\/07\/history-1024x510.png 1024w, https:\/\/www.modernescpp.com\/wp-content\/uploads\/2022\/07\/history-768x382.png 768w\" sizes=\"auto, (max-width: 650px) 100vw, 650px\" \/><\/p>\n<p>Let me start my historical detour including important persons and their books. This detour is by no means complete.<\/p>\n<h2><span class=\"ez-toc-section\" id=\"History_of_Patterns\"><\/span>History of Patterns<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p><img loading=\"lazy\" decoding=\"async\" class=\" size-full wp-image-6393\" src=\"https:\/\/www.modernescpp.com\/wp-content\/uploads\/2022\/07\/PatternHistoryNew.png\" alt=\"PatternHistoryNew\" width=\"650\" height=\"241\" style=\"display: block; margin-left: auto; margin-right: auto;\" srcset=\"https:\/\/www.modernescpp.com\/wp-content\/uploads\/2022\/07\/PatternHistoryNew.png 1121w, https:\/\/www.modernescpp.com\/wp-content\/uploads\/2022\/07\/PatternHistoryNew-300x111.png 300w, https:\/\/www.modernescpp.com\/wp-content\/uploads\/2022\/07\/PatternHistoryNew-1024x380.png 1024w, https:\/\/www.modernescpp.com\/wp-content\/uploads\/2022\/07\/PatternHistoryNew-768x285.png 768w\" sizes=\"auto, (max-width: 650px) 100vw, 650px\" \/><\/p>\n<p>&nbsp;<\/p>\n<p>&nbsp;<\/p>\n<h3><span class=\"ez-toc-section\" id=\"Christopher_Alexander\"><\/span>Christopher Alexander<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p><img loading=\"lazy\" decoding=\"async\" class=\" alignleft size-full wp-image-6394\" src=\"https:\/\/www.modernescpp.com\/wp-content\/uploads\/2022\/07\/ChristopherAlexander2012.jpg\" alt=\"ChristopherAlexander2012\" width=\"130\" height=\"114\" style=\"margin: 20px; float: left;\" srcset=\"https:\/\/www.modernescpp.com\/wp-content\/uploads\/2022\/07\/ChristopherAlexander2012.jpg 754w, https:\/\/www.modernescpp.com\/wp-content\/uploads\/2022\/07\/ChristopherAlexander2012-300x263.jpg 300w\" sizes=\"auto, (max-width: 130px) 100vw, 130px\" \/><\/p>\n<p>&nbsp;<\/p>\n<p>&nbsp;<\/p>\n<p>The idea of patterns goes back to <a href=\"https:\/\/en.wikipedia.org\/wiki\/Christopher_Alexander\">Christopher Alexander<\/a>. He coined in his books &#8220;<a href=\"https:\/\/en.wikipedia.org\/wiki\/Notes_on_the_Synthesis_of_Form\" title=\"Notes on the Synthesis of Form\">Notes on the Synthesis of Form, A City is Not a Tree<\/a>&#8220;, &#8220;<a href=\"https:\/\/en.wikipedia.org\/wiki\/The_Timeless_Way_of_Building\" title=\"The Timeless Way of Building\">The Timeless Way of Building<\/a>&#8220;, &#8220;<a href=\"https:\/\/en.wikipedia.org\/wiki\/The_Oregon_Experiment\" title=\"The Oregon Experiment\">The Oregon Experiment<\/a><i>&#8220;, <\/i>&#8220;<a href=\"https:\/\/en.wikipedia.org\/wiki\/The_Nature_of_Order\" title=\"The Nature of Order\">The Nature of Order<\/a>&#8220;, and in particular in his book &#8220;<a href=\"https:\/\/en.wikipedia.org\/wiki\/A_Pattern_Language\">A Pattern Language: Town, Buildings, Construction<\/a>&#8221; terms such as patterns, forces, or pattern languages. Christopher Alexander was an architect, who focused on interior design but also on urban design. His main concern was to create an architecture that is geared to the needs of the people. He developed with his colleagues in the&nbsp;Center for Environmental Structure in Berkley more than 250 patterns for design problems: each one consists of a problem, a discussion of the problem with an illustration, and a solution. I guess, this sound familiar to you.<\/p>\n<p>&nbsp;<\/p>\n<p>&nbsp;<\/p>\n<p><a href=\"https:\/\/commons.wikimedia.org\/wiki\/File:ChristopherAlexander2012.jpg\">Michaelmehaffy<\/a>, <a href=\"https:\/\/creativecommons.org\/licenses\/by-sa\/4.0\">CC BY-SA 4.0<\/a>, via Wikimedia Commons<\/p>\n<p>&nbsp;<\/p>\n<\/p>\n<h3><span class=\"ez-toc-section\" id=\"Ward_Cunningham_and_Kent_Beck\"><\/span>Ward Cunningham and Kent Beck<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p><a href=\"https:\/\/en.wikipedia.org\/wiki\/Ward_Cunningham\">Ward Cunningham<\/a> and <a href=\"https:\/\/en.wikipedia.org\/wiki\/Kent_Beck\">Kent Beck<\/a> have been inspired by the ideas of Christoph Alexander and applied his ideas to software development. In 1987 they published their book &#8220;<a href=\"http:\/\/c2.com\/doc\/oopsla87.html\">Using Pattern Languages for Object-Oriented Programs<\/a>&#8220;, a pattern language to facilitate the development of user interfaces in Smalltalk. They established the first pattern system for designing user interfaces. Here are four of them:<\/p>\n<ul>\n<li>Window-per-Task: a separate window for each task<\/li>\n<li>Few-Panes: develop a separate area in the window for each view of the task<\/li>\n<li>Standard-Panes: design the functional areas according to the same principles<\/li>\n<li>Nouns-and-verbs: action instructions (verbs) belong in the menu<\/li>\n<\/ul>\n<p>Maybe you don&#8217;t know it, but Ward Cunningham and Kent Beck are two of the most influential minds in software development:<\/p>\n<h4>Ward Cunningham:<\/h4>\n<p><img loading=\"lazy\" decoding=\"async\" class=\" alignleft size-full wp-image-6395\" src=\"https:\/\/www.modernescpp.com\/wp-content\/uploads\/2022\/07\/448px-Ward_Cunningham_-_Commons-1.jpg\" alt=\"448px Ward Cunningham Commons 1\" width=\"130\" height=\"140\" style=\"margin: 20px; float: left;\" srcset=\"https:\/\/www.modernescpp.com\/wp-content\/uploads\/2022\/07\/448px-Ward_Cunningham_-_Commons-1.jpg 448w, https:\/\/www.modernescpp.com\/wp-content\/uploads\/2022\/07\/448px-Ward_Cunningham_-_Commons-1-280x300.jpg 280w\" sizes=\"auto, (max-width: 130px) 100vw, 130px\" \/><\/p>\n<p>&nbsp;<\/p>\n<p>&nbsp;By Carrigg Photography for the Wikimedia Foundation &#8211; Own work, CC BY-SA 3.0, <a href=\"https:\/\/commons.wikimedia.org\/w\/index.php?curid=17697618\">https:\/\/commons.wikimedia.org\/w\/index.php?curid=17697618<\/a><\/p>\n<p>&nbsp;<\/p>\n<ul>\n<li>pioneer of software design patterns<\/li>\n<li>creator of the wiki<\/li>\n<li>popularized <a href=\"https:\/\/en.wikipedia.org\/wiki\/Class-responsibility-collaboration_card\">CRC cards<\/a> with Kent Beck; CRC stands for <a href=\"https:\/\/en.wikipedia.org\/wiki\/Class-responsibility-collaboration_card\">Class Responsibility Collaboration (CRC)<\/a><\/li>\n<\/ul>\n<h4>&nbsp;<\/h4>\n<h4>&nbsp;<\/h4>\n<h4>Kent Beck:<\/h4>\n<p><img loading=\"lazy\" decoding=\"async\" class=\" alignleft size-full wp-image-6396\" src=\"https:\/\/www.modernescpp.com\/wp-content\/uploads\/2022\/07\/317px-Kent_Beck_no_Workshop_Mapping_XP.jpg\" alt=\"317px Kent Beck no Workshop Mapping XP\" width=\"130\" height=\"197\" style=\"margin: 20px; float: left;\" srcset=\"https:\/\/www.modernescpp.com\/wp-content\/uploads\/2022\/07\/317px-Kent_Beck_no_Workshop_Mapping_XP.jpg 317w, https:\/\/www.modernescpp.com\/wp-content\/uploads\/2022\/07\/317px-Kent_Beck_no_Workshop_Mapping_XP-199x300.jpg 199w\" sizes=\"auto, (max-width: 130px) 100vw, 130px\" \/><\/p>\n<p>&nbsp;<\/p>\n<p>By Improve It &#8211; Flickr: Kent Beck no Workshop Mapping XP., CC BY-SA 2.0, <a href=\"https:\/\/commons.wikimedia.org\/w\/index.php?curid=2938419\">https:\/\/commons.wikimedia.org\/w\/index.php?curid=2938419<\/a><\/p>\n<p>&nbsp;<\/p>\n<ul>\n<li>pioneer of software design pattern<\/li>\n<li>wrote the unit test framework sUnit for Smalltalk<\/li>\n<li>developed the Junit unit test framework for Java together with <a href=\"https:\/\/en.wikipedia.org\/wiki\/Erich_Gamma\">Erich Gamma<\/a><\/li>\n<li>popularized <a href=\"https:\/\/en.wikipedia.org\/wiki\/Class-responsibility-collaboration_card\">CRC cards<\/a> with Ward Cunningham<\/li>\n<li>developed<a href=\"https:\/\/en.wikipedia.org\/wiki\/Extreme_programming\"> Extreme Programming (XP)<\/a><\/li>\n<\/ul>\n<h3><span class=\"ez-toc-section\" id=\"i\"><\/span>&nbsp;<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<h3><span class=\"ez-toc-section\" id=\"i-2\"><\/span>&nbsp;<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<h3><span class=\"ez-toc-section\" id=\"James_Coplien\"><\/span>James Coplien<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p>&nbsp;James Coplien published 1991 the book &#8220;<a href=\"https:\/\/archive.org\/details\/advancedcbsprogr00copl\">Advanced C++ Programming Styles and Idioms<\/a>&#8220;. His book is a catalog of C++ idioms such as:<\/p>\n<ul>\n<li>Handle\/Body: separation of interface and implementation<\/li>\n<li>Envelope\/Letter: tie common semantics of interface and implementation together<\/li>\n<li>Virtual Constructor: build a hierarchy of a known abstract type but of an unknown concrete type<\/li>\n<li>Concrete Data Type: determine of an object should created on the heap of in the current scope<\/li>\n<li>Algebraic Hierarchy: structure class following algebraic types<\/li>\n<li>Non-Hierarchical Addition. deal with arithmetic operations between types that cannot be promoted to the other<\/li>\n<li>Type Promotion: build two type conversion mechanisms to build a consistent type promotion structure<\/li>\n<\/ul>\n<h3><span class=\"ez-toc-section\" id=\"Erich_Gamma\"><\/span>Erich Gamma<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p><img loading=\"lazy\" decoding=\"async\" class=\" alignleft size-full wp-image-6397\" src=\"https:\/\/www.modernescpp.com\/wp-content\/uploads\/2022\/07\/ErichGamma.jpg\" alt=\"ErichGamma\" width=\"130\" height=\"114\" style=\"margin: 20px; float: left;\" \/><\/p>\n<p>&nbsp;<\/p>\n<p><a href=\"https:\/\/en.wikipedia.org\/wiki\/Erich_Gamma\">Erich Gamma<\/a> received his doctorate in Zurich 1991 on the use of patterns in software development: &#8220;Objektorientierte Software-Entwicklung am Beispiel von ET++&#8221;. ET++ is a portable C++ class library for developing interactive graphical applications.Gamma&#8217;s dissertation became the base of his co-authored book &#8220;<a href=\"https:\/\/en.wikipedia.org\/wiki\/Design_Patterns\">Design Patterns: Elements of Reusable Object-Oriented Software<\/a>&#8220;. The other three authors are <a href=\"https:\/\/de.wikipedia.org\/wiki\/Richard_Helm\">Richard Helm<\/a>, <a href=\"https:\/\/de.wikipedia.org\/wiki\/Ralph_Johnson\">Ralph Johnson<\/a>, and <a href=\"https:\/\/de.wikipedia.org\/wiki\/John_Vlissides\">John Vlissides<\/a>. All four together build the well-known Gang of Four (GoF).<\/p>\n<p>Erich Gamma is also known for his development of the Junit unit test framework for Java together with Kent Beck and his leadership of the development of the <a href=\"https:\/\/en.wikipedia.org\/wiki\/Eclipse_(software)\">Eclipse <\/a>framework.<\/p>\n<p>&nbsp;<\/p>\n<p>&nbsp;<\/p>\n<h3><span class=\"ez-toc-section\" id=\"The_Hillside_Group\"><\/span>The Hillside Group<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p>In 1993,<a href=\"https:\/\/en.wikipedia.org\/wiki\/Grady_Booch\"> Grady Booch<\/a> and Kent Beck invited several protagonists from the object-oriented scene to a mountain cabin in Colorado. One of the topics was the fusion of Christopher Alexander&#8217;s ideas with more recent work by Erich Gamma as a basis for design patterns. The formation of a non-profit organization focused on software patterns, which was given the name Hillside Group. To this day, this group plays a central role in the pattern community. It gave rise to numerous conferences on the topic, the so-called PLoPs (Pattern Languages of Programming). Additionally, when you search for more information regarding patterns, books, or conferences about patterns, the<a href=\"https:\/\/hillside.net\/patterns\"> hillside group<\/a> should be your first choice.<\/p>\n<h3><span class=\"ez-toc-section\" id=\"Design_Patterns_Elements_of_Reusable_Object-Oriented_Software\"><\/span>Design Patterns: Elements of Reusable Object-Oriented Software<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p><img loading=\"lazy\" decoding=\"async\" class=\" alignleft size-full wp-image-6398\" src=\"https:\/\/www.modernescpp.com\/wp-content\/uploads\/2022\/07\/DesignPatterns.jpg\" alt=\"DesignPatterns\" width=\"100\" height=\"126\" style=\"margin: 20px; float: left;\" srcset=\"https:\/\/www.modernescpp.com\/wp-content\/uploads\/2022\/07\/DesignPatterns.jpg 397w, https:\/\/www.modernescpp.com\/wp-content\/uploads\/2022\/07\/DesignPatterns-238x300.jpg 238w\" sizes=\"auto, (max-width: 100px) 100vw, 100px\" \/><\/p>\n<p>&nbsp;<\/p>\n<p>&nbsp;<\/p>\n<p>In 1994,&nbsp; <a href=\"https:\/\/en.wikipedia.org\/wiki\/Erich_Gamma\">Erich Gamma<\/a>, <a href=\"https:\/\/de.wikipedia.org\/wiki\/Richard_Helm\">Richard Helm<\/a>, <a href=\"https:\/\/de.wikipedia.org\/wiki\/Ralph_Johnson\">Ralph Johnson<\/a>, and <a href=\"https:\/\/de.wikipedia.org\/wiki\/John_Vlissides\">John Vlissides<\/a> published their seminal book &#8220;<a href=\"https:\/\/en.wikipedia.org\/wiki\/Design_Patterns\">Design Patterns: Elements of Reusable Object-Oriented Software<\/a>&#8220;. It has 23 object-oriented patterns, categorized into creational, structural, and behavioral patterns. This book marks the beginning of the worldwide pattern adoption and is regarded as the most important book about software design. More than 500,000 copies were sold so far.<\/p>\n<h3><span class=\"ez-toc-section\" id=\"i-3\"><\/span>&nbsp;<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<h3><span class=\"ez-toc-section\" id=\"i-4\"><\/span>&nbsp;<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<h3 id=\"title\" class=\"a-spacing-none a-text-normal\"><span class=\"ez-toc-section\" id=\"Pattern-Oriented_Software_Architecture_Volume_1\"><\/span><span id=\"productTitle\" class=\"a-size-extra-large\">Pattern-Oriented Software Architecture, Volume 1<br \/><\/span><span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p><img loading=\"lazy\" decoding=\"async\" class=\" alignleft size-full wp-image-6399\" src=\"https:\/\/www.modernescpp.com\/wp-content\/uploads\/2022\/07\/POSA1.jpg\" alt=\"POSA1\" width=\"100\" height=\"130\" style=\"margin: 20px; float: left;\" srcset=\"https:\/\/www.modernescpp.com\/wp-content\/uploads\/2022\/07\/POSA1.jpg 384w, https:\/\/www.modernescpp.com\/wp-content\/uploads\/2022\/07\/POSA1-231x300.jpg 231w\" sizes=\"auto, (max-width: 100px) 100vw, 100px\" \/><\/p>\n<p>&nbsp;<\/p>\n<p>&nbsp;<\/p>\n<p>Frank Buschmann, Regine Meunier, Hans Rohnert, Peter Sommerlad, and Michael Stal of Siemens AG published in 1996 the book <a href=\"https:\/\/en.wikipedia.org\/wiki\/Pattern-Oriented_Software_Architecture\">&#8220;<span id=\"productTitle\" class=\"a-size-extra-large\">Pattern-Oriented Software Architecture, Volume 1<\/span><\/a>&#8220;. Their very influential book represents the progression and evolution of the pattern approach into a system of patterns capable of describing and documenting large-scale applications. Pattern-Oriented Software Architecture (POSA) consists of 17 architectural patterns, design patterns, and idioms. The entire POSA series, published from 1996 &#8211; 2007, has five volumes.<\/p>\n<h2><span class=\"ez-toc-section\" id=\"i-5\"><\/span>&nbsp;<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<h2><span class=\"ez-toc-section\" id=\"Whats_next\"><\/span>What&#8217;s next?<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p>In my next post, I present the different classifications of patterns in the books &#8220;<a href=\"https:\/\/en.wikipedia.org\/wiki\/Design_Patterns\">Design Patterns: Elements of Reusable Object-Oriented Software<\/a> and <a href=\"https:\/\/en.wikipedia.org\/wiki\/Pattern-Oriented_Software_Architecture\">&#8220;<span id=\"productTitle\" class=\"a-size-extra-large\">Pattern-Oriented Software Architecture, Volume 1<\/span><\/a>&#8220;.<\/p>\n<h2><span class=\"ez-toc-section\" id=\"Vacation_break\"><\/span>Vacation break<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p>Due to my vacation break, I will not publish a post in the next two weeks. My next post will, therefore, be published on the 1st of August 2022.<\/p>\n<p>&nbsp;<\/p>\n<p>&nbsp;<\/p>\n<\/p>\n<p>&nbsp;<\/p>\n<p>&nbsp;<\/p>\n<p>&nbsp;<\/p>\n<p>&nbsp;<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Most software developers assume that the book &#8220;Design Patterns: Elements of Reusable Object-Oriented Software&#8221;, published in 1994, stands for the birth of patterns. No. The term was coined by Christopher Alexander in 1977.<\/p>\n","protected":false},"author":21,"featured_media":6392,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[379],"tags":[411],"class_list":["post-6400","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-patterns","tag-history"],"_links":{"self":[{"href":"https:\/\/www.modernescpp.com\/index.php\/wp-json\/wp\/v2\/posts\/6400","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.modernescpp.com\/index.php\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.modernescpp.com\/index.php\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.modernescpp.com\/index.php\/wp-json\/wp\/v2\/users\/21"}],"replies":[{"embeddable":true,"href":"https:\/\/www.modernescpp.com\/index.php\/wp-json\/wp\/v2\/comments?post=6400"}],"version-history":[{"count":1,"href":"https:\/\/www.modernescpp.com\/index.php\/wp-json\/wp\/v2\/posts\/6400\/revisions"}],"predecessor-version":[{"id":6663,"href":"https:\/\/www.modernescpp.com\/index.php\/wp-json\/wp\/v2\/posts\/6400\/revisions\/6663"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.modernescpp.com\/index.php\/wp-json\/wp\/v2\/media\/6392"}],"wp:attachment":[{"href":"https:\/\/www.modernescpp.com\/index.php\/wp-json\/wp\/v2\/media?parent=6400"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.modernescpp.com\/index.php\/wp-json\/wp\/v2\/categories?post=6400"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.modernescpp.com\/index.php\/wp-json\/wp\/v2\/tags?post=6400"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}