Design patterns are among the major tools in the toolboxes of those who espouse the
generalist approach. If you look at samples from a broad spectrum of software solutions,
you will find that though the specifics may vary widely, there is often an
underlying structural similarity. (Searching a filesystem for a file with a particular
attribute is in some sense structurally similar to searching an annotated parse tree for
a symbol with a particular type.) Design patterns codify general solutions to common
problems.