Purpose Of Patterns

It's a bit arrogant to define patterns in this community, so I'd like to take a stab at defining the purpose of patterns instead, if we can take to mean use context.

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:

  1. knowledge is delivered by experts in the field. Effective development includes specialized "SWAT teams" and other ways to make sure the experts see a wide range of problems. New experts are trained by mentoring or other personal methods.

  2. knowledge is delivered through the application of well-defined methods by skilled workers. In the best method definitions, there are spots that say "Call an expert" to cope with tougher problems.

  3. knowledge is delivered by "expert systems" used by relatively unskilled workers (or at least unskilled in the appropriate knowledge domain). Sounds a lot like Visual Basic and Access to me.

While patterns have been used for CASE tools as a semi-automated programming aid (a journeyman or apprentice-level aid), they have not been entirely successful. There have been any number of complaints that using patterns as templates misses their point.

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


CategoryPattern
EditText of this page (last edited April 19, 2005)
FindPage by browsing or searching

This page mirrored in WikiPagesAboutWhatArePatterns as of April 29, 2006