Let's start our decision of design patterns by looking
at the history of patterns. As you know, I like
to give this sort of historical perspective on how and
when concepts were defined. In this case, we have to
go back to 1977, when Christopher Alexander, an American professor
of architecture at UC Berkeley, introduces the idea of patterns,
successful solutions to problems, in his book called a Pattern
Language. The book contains about 250 patterns. And the idea
is that occupants of a building should be able
to design it. And the patterns in the book provide
a way to do that. And this idea of design
patterns, so, a formal way of documenting successful solutions to
problems, inspired several other disciplines. In particular, in 1987,
Ward Cunningham and Kent Beck leveraged this idea of Alexander's
patterns in the context of an object oriented language.
And in this specific the language was Smalltalk.
Some of you might know the language. So what Cunningham
and Beck did, was to create a 5 pattern
language for guiding novice Smalltalk programmers. So they did
an experiment and had several developers using their patterns, and
the experiment was extremely successful. The users were able to
create elegant designs using the provided patterns. And in case
you are interested in reading about it, Cunningham and Beck
reported the results in the article, Using Pattern Languages for
Object Oriented Programs, which was published at the
International Conference on Object Oriented Programming, Systems, Languages, and
Applications, also called OOPSLA, in 1987. At the
same time, Eric Gamma was working on his dissertation,
whose topic was the importance of patterns and
how to capture them. Between 1987 and 1992, there
were several workshops related to design patterns. And
in 1992, Jim Coplien compiled a catalog of C++
items, which are some sort of patterns, and
he listed this catalog of patterns in his
book, which was titled Advanced C++ Programming Styles
and Idioms. Finally, in 1993 and 1994, there were
several additional workshops focused on patterns. And this
workshop brought together many patterns folks, including these
4 guys, Erich Gamma, Richard Helm, Ralph Johnson,
and John Vlissides. These guys are also known as
the gang of 4. And the result of this collaboration was the
famous book Design Patterns: Elements of
Reusable Object Oriented Software. So this
is basically The Book on design patterns. If you want to buy
a book on design pattern, this is the one you should get.