Angelika Langer - Training & Consulting

 
HOME | SEMINARS | TALKS | ARTICLES | BOOKS | LINKS | IOSTREAMS | GENERICS | ABOUT | NEWSLETTER | CONTACT | SITEMAP
Book Review - The Pattern Almanac

Books  
HOME 
SEMINARS 
TALKS 
ARTICLES 

BOOKS

  OVERVIEW
  REVIEWS

  BIBLIOGRAPHY    
    J2SE
    J2EE
    CORE C++
    STL
    TEMPLATES
    IOSTREAMS
    CONCURRENCY
    I18N
    PATTERNS
    OOA/OOD
    TESTING
    MANAGEMENT
 

LINKS 
IOSTREAMS 
GENERICS 
ABOUT 
NEWSLETTER 
CONTACT 
SITEMAP 
Book Review - The Pattern Almanac
   
  Book Review of the week
 
 
 
The Pattern Almanac 
By Linda Rising 
Reading,MA:Addison-Wesley
ISBN 0201615673
330 pages
Price: $29.95
(Reviewed 10/27/00) 
 
 
A Directory of Patterns
This book serves as a locator for descriptions of published pattern, provided you have access to a library of pattern books
 
L et's say it up-front: Linda Rising's Pattern Almanac is not a book that teaches you anything about patterns. Instead, it's merely a directory of patterns that serves as a locator for descriptions of published pattern. Each pattern is listed by its name, a rudimentary description of its intent, and a reference to a book, journal, or URL where the actual description can be found. Without a comprehensive library of pattern books, this almanac is close to useless. 

This being said, let's see why it is still useful. If you are fairly familiar with patterns, the number of books and articles that have been written about them might overwhelm you. You might have heard of a particular pattern, but when you actually need it you might have problems locating it. This is where the The Pattern Almanac helps. If you have an idea of what you are looking for and maybe can even remember the name of the pattern, you can look it up in the almanac; extract the reference to the right book, article, or URL; go to your library; and find the relevant text about the pattern. 

Specifically, you would need some of the following books: 

  • Design Patterns: Elements of Reusable Object-Oriented Systems by Erich Gamma et al. (the "GoF book") 
  • Pattern Languages of Program Design, Vol. 1?4
  • Pattern-Oriented Software Architecture: A System of Patterns by Frank Buschmann et al. 
  • Various back issues of C++ Report, JOOP, Java Report, Smalltalk Report, and Communications of the ACM
  • Concurrent Programming in Java: Design Principles and Patterns by Doug Lea
  • Analysis Patterns by Martin Fowler 
This list is not meant to be comprehensive; there are more titles referenced in the almanac. But with these books you'll have a reference for approximately 80 percent of the listed patterns. All of these references are sound and useful. Interestingly, The Pattern Almanac ignores titles of debatable quality such as Mark Grand's Patterns in Java volumes. Being based on sound references is certainly a plus for this almanac. 

Still, in an almanac we would expect to find a more comprehensive collection of wisdom. For instance, there is a section about C+ idioms, most of which were described by James Coplien, and another one about Java idioms, most of which originate from Doug Lea. 

And that's it? There is more to C++ and Java. The wisdom in some areas of C++ (such as template programming, exception handling, and library usage) is still emerging and might have been published, but not necessarily in the form of patterns. The same holds true for Java. There is a pattern for expressing the immutability of objects in Java. It has not yet been published as a pattern, as far as we know, and for this reason it does not appear in this almanac. The Patterns Almanac lists those insights that have already been published in the form of a pattern and does not aim to identify new patterns where they emerge. The goal here is to provide a directory that points you to already published patterns, and nothing more. 

As a directory, it is well organized. You'll find an alphabetic list of all patterns, grouped into categories, such as behavioral, creational, structural, and C++ Idioms; Java Idioms; Smalltalk Idioms; and also categories such as client-server, concurrent systems, distributed systems, all the way up to topics such as training, testing, refactoring, design process, and writers' workshops. 

Then there is the core of the book, namely the entries, where each pattern is described very, very briefly. To give you an idea of what an entry looks like, here is the entry for the Curiously Recurring Template pattern: 

Category: C++ Idioms, Finite State Machine
Reference: [Coplien95a], C++ Report, Feb. 1995, 24?27
Description: A class is derived from a base class instantiated from a template. The derived class is passed as a parameter to the template instantiation. This pattern captures a circular dependency using inheritance in one direction and templates in the other.
Experience Report: [Piehler99] 
In this example, "Piehler99" is a reference to yet another C++ Report article. 

Without knowing what the Curiously Recurring Template pattern is, you would not understand a thing, but if you've already read about it, you'll recognize it. If you also have access to back issues of the C++ Report , you can look it up and use it. (In most cases, the reference is more readily available and does not point to back issues of magazine articles, but instead to pages in a book or to a URL.) 

Now, this pattern and its variations are used in other places as well?among them in Microsoft's ATL library?and you'll find a description of the pattern (but not in the form of a pattern) in the appendix of ATL Internals by Brent Rector, et al. You'll also find the pattern described in early C++ books such as Scientific and Engineering C++ by John Barton and LeeNackman. All of these other references would certainly aid understanding of the pattern. Unfortunately, they are not mentioned in this almanac. True, for understanding the pattern, you would not need further references, but they would illustrate the point, much like the "Experience Report" probably does. 

Depending on how you see it, The Patterns Almanac is not complete but it is certainly great help in finding the relevant information about a given pattern, provided you have access to a fairly comprehensive library of pattern books. 

Angelika Langer develops and teaches classes on Java, C++, multithreading, and internationalization. She is an internationally recognized speaker and served on the ANSI/ISO C++ Committee from 1993 to 1998. Klaus Kreft is a software architect and senior consultant with 15+ years of experience in industrial software development. He currently works for Siemens Business Services in Germany. Langer and Kreft are authors of "Standard C++ IOStreams and Locales" (Addison-Wesley, 2000) and are columnists for the C/C++ Users Journal. 

 

 
© Copyright 1995-2003 by Angelika Langer.  All Rights Reserved.    URL: < http://www.AngelikaLanger.com/Articles/Reviews/PatternAlmanac/review.htm  last update: 29 Oct 2003