This book is about how to model software systems and how to use those models. It is rooted in that emerging intellectual "ecosystem" comprising the various networks (the Internet, intranets, extranets, and so on), distributed objects, piecemeal development based on short development cycles, and something called patterns. It is aimed at developers, designers, and architects of software systems and the ways they practice their craft.
It proposes that the convergent appearance of patterns and the Unified Modeling Language (UML) is no accident. Patterns are a way of documenting collective, timeless ways of thinking about designing and building software systems. The UML is a way of documenting the specifics of a system for a particular time to support a development effort as the system evolves and changes. Both are exercises in eliminating the ephemeral quality of process and product that has bedeviled our profession.
The two are manifestations of a basic shift in the way systems are designed and built—one that software professionals are just beginning to grapple with. This shift is indicative of a broader trend in the way professionals work and the way they work with the people they are supposed to help, which is beginning to be felt in the software community.
At its simplest, the change for software developers represents a shift away from an immature vision of software development as a field dominated by solitary coders. It moves toward a more mature vision of a collaborative nature of software development—one that is typical of genuine professional practice. But it also challenges the traditional views that software developers have about their profession.
In a sense, the emergence of patterns and the UML also symbolizes a shift away from a systems culture, in which programming defined the core of the discipline and coding defined the core of its practice. Design and modeling have become equal partners with programming and coding in the enterprise of software development.
The pattern language in this book is a practical adjunct to this shift. Its goal is to provide a toolset that software professionals can use, one that is fitted to the dimensions of the work to be done in modeling systems and is equally fitted to the needs of real practitioners and craftspeople engaged in software development.