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: 0 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. 0 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. 0 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 ---- Are you saying that patterns are useful only to train proficient coding? Or that they are useful only to express a model of the particular project a person is working on to another coder that understands such models and appreciates them? If the second is true, then pattern language would be a way to model the project by dividing it into a set of patterns. If in object oriented programming, this would be similar to a sentence, "Boy sits on chair". Boy being a pattern of an object, a way to describe an object that would have the same capabilities of a boy. Sit being a pattern that describes approach for adding methods to Boy. Chair being an object that receives an action, thus being also a pattern. AnswerMe In that way, a pattern language may result in a "sentence" such as, "([Network routing service] within Instance A of [Network device]) [speaks to] [communication handler] [directs] [network traffic] [received by] ([Network routing service] within Instance X of [Network device]); Where X = A|B|C|etc.". This would be similar to the way mathematical formulas are used to describe actual events. Please note that my example is way off, needs a lot of correcting, but my intent is to express an understanding of this topic, not an understanding of how to model network communication. -- LeeLouviere ---- CategoryPattern