|
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.
|