I am writing the following in spite of the fact that most regular Wiki visitors could have done it better, just to get this page started. Please improve (by editing instead of commenting, if possible, to keep things simple). -- FalkBruegmann
Patterns are a way to analyze solutions to recurring problems
, make them reusable and communicate them. Patterns are a way of thinking. Patterns are also a cult.
To generalize a solution to a problem, you have to look at the problem in its context
: What are the (conflicting) goals, the forces
, that recur in that context?
Describe the problem and its context, add an elegant solution that resolves
the forces (that is, brings them into a dynamic balance), give the whole thing a name, and there you are - you have a pattern
Because they turn out to be unbelievably useful, patterns have sprung up in a variety of fields: First in Architecture (buildings, not software!), then in Software Development, and now everywhere. :-) Although in mathematics the notion of generic grammars has been known for centuries to describe solutions to problems, the general public has no understanding of the math language. Patterns as defined by the originator ChristopherAlexander
are much more readable and are a textual description of the core of a solution to a generic problem.
A variety of pattern categories are recognized in software pattern community.
are the most well known, but there are also ArchitecturePatterns?
(also called Idioms). Finally, there are AntiPattern
s, patterns where the solution looks attractive, but actually creates more problems than it solves.
The most successful pattern book, and possibly the first one to buy (after browsing Wiki, of course), is DesignPatterns
by the GangOfFour
). It is also worth reading the original architecture book, TheTimelessWayOfBuilding
. This book is very good for understanding the need for patterns and differentiating between good and bad patterns that occur in a system. Even though the book is about architecture of real buildings, its comments and text seem to relate so much to software engineering, with statements like "the minute an idea for a project is conceived, it's already too late to think of it from scratch!".
This discussion might be useful for pattern newbies : http://www.nooranch.com/synaesmedia/wiki/wiki.cgi?PatternLanguage
I generated this page in response to a beginner's angst at finding it difficult to learn object-oriented design (in particular, program design) from the materials in this WikiWikiWeb
. Not, frankly, because I have much to say on the subject, but to reassure the original author that design patterns aren't a natural way to think even for one who has been programming for thirty years.
The required introductory material should be a little less academic in tone than the GoF book, I think. I've seen books on design patterns which appeared to have obfuscation as their primary goal. This is, in part, why I am coming so late to the party.
For a beginner, my personal book recommendation is ObjectOrientedDesignHeuristics
(ISBN 0-201-63385 ), which is somewhere between teaching how to recognize basic CodeSmell
s and basic design patterns. If you're interested, have a look at the reviews on amazon.com. --FalkBruegmann
People who are beginners at programming should not study design patterns. The DesignPatternsBook
says it is for people who have been using C++ for a couple of years and who have just figured out that object-oriented programming is harder than they thought. If you are new to patterns, but not new to object-oriented programming, the DesignPatternsBook
should be readable enough. If it is not, join a DesignPatternsStudyGroup
or join a mailing list where you can talk about it with others. If you are new to objects, I would recommend ObjectOrientedDesignHeuristics
If you are trying to tackle the original GoF DesignPatternsBook
and having difficulty, I recommend taking a look at HeadFirstDesignPatterns
). Its written in the HeadFirst?
style - meaning lots of humor, pictures, practice questions and problems to get you to really wrap your head around the patterns discussed. Its certainly not a replacement for the original book, but a useful companion. --RobSanheim
See also CategoryPattern
for pattern-related pages on Wiki.