In my lectures I often remark that, IMHO, one of the most important advances in software engineering in the last decade has been the practice of patterns, because they give us a means of naming and reasoning about societies of classes, designs that are at a higher level of abstraction than individual entities. The past several months, I've been slogging through the patterns literature in order to create a contemporary catalog of patterns (you'll need to be logged in to the Handbook to visit this link). This is not a new idea: in 2000, Linda Rising published The Pattern Almanac and there are many lists of patterns to be found online. I undertook this present work to get a snapshot of the current state of the practice in patterns, so that as I continued with my archeological digs for the Handbook I'd be able to apply the patterns that had already been identified. In this journey, I learned a number of things, but three stand out.
First, there has been a considerable maturation of the patterns literature over the years since the publication of the Gang of Four's Design Patterns book and the first PLOP conference (not to be confused with Scott Adam's short-lived cartoon of the same name). If you study some of the earliest documented patterns and compare them to recent ones, you'll see that the form and rigor of patterns documentation has advanced greatly.
Second, I was touched by the vitality of the patterns community. I've cataloged almost 2,000 patterns, realizing that there are many more out there that I've not cataloged. My capricious and arbitrary pruning of the patterns literature followed a simple rule: I included a pattern if its source was accessible (this favored patterns published in books and proceedings and rejected those only found online, as they were likely to be inaccessible over time). Patterns that had gone through a shepherding process were generally selected over those that had not.
Third, I was surprised by the breadth of patterns that have been documented. In the literature, you'll find a number of domain-specific pattern languages, patterns for non-software systems, and even many metapatterns and antipatterns.
As my work on the Handbook proceeds, I'll continue to augment my patterns catalog, but for the moment, I've reached a stable point: I've researched all the interesting (to me) sources of accessible patterns, and will now turn my attention to doing more archeological digs. My research assistant, Celso Gonzalez, will be helping me in the coming weeks clean up the catalog: we need to tighten up the references, add mention of the pattern languages from which some of these patterns are drawn, and spend some time rethinking the classification of the various patterns. I'll also task my sysadmin (oh wait...that's me!) to fiddle with my Google Mini - which I use to provide searching on the site - to make searching the patterns catalog a bit easier.