I'm currently involved in a knowledge management study at my employer, Johnson Controls (http://www.jci.com). We've identified three major forms of knowledge delivery, and I'm inclined to name them after the three levels of competence in medieval guilds:
I'd suggest that the real purpose of patterns is that they give their users a common structure and vocabulary to discuss their work. As used in GangOfFour book, they're not really appropriate for apprentice or (some) journeyman level programmers. They appear to be more appropriate as a training aid to get journeymen to the master level, for example, than as a way to teach apprentices to be full journeymen. Apprentice programmers may not have experience to appreciate the importance of patterns as recurring "motifs" in their programs.
Dialogues on what patterns are present in a project, or how to generalize and organize them into a pattern language are most appropriate at a master level. That may be the driving force towards increasingly selective groups for discussing and editing patterns into pattern languages -- there's no patterns newsgroup, a (relatively obscure) patterns mailing list, and much of the interesting thought occurs in small workshop settings or on limited visibility services like this one.
As an somewhat opposing viewpoint, TomErickson contends that patterns are not used at all by experienced architects, but have found common use by non-architects as a means of conveying their ideas to experts. I'm not sure of any similar phenomenon in the software community. [In my experience as a project manager for efforts involving experts for several disjoint areas, an important skill is the ability to understand the "patterns" of applying these disciplines to problems at a conceptual level, since I cannot understand all the details of my team members' work.]
Obviously, this is a gross simplification, but I wonder whether this view might explain some of the confusion about pattern development and application that I've seen. A followup question might be "What is needed to make patterns more useful for journeyman and apprentice applications?" Or "What software patterns are needed to help non-computer people define their requirements for new software?"
-- KenMeltsner
This page mirrored in WikiPagesAboutWhatArePatterns as of April 29, 2006