![]() |
![]() ![]() |
1.3 GoalsThe development of educated, knowledgeable architects is the primary focus of this work. This book attempts to define a package of skills required to make the successful transition from a skilled software developer into a skilled software architect. This is not a technical book that presents the details of every facet of software architecture in sufficient depth that no additional information is required for success. This book will not be the last book a prospective software architect will ever need to read in order to be a software architect. Rather, it is a starting point and provides a good solid background for many of the issues and areas that will be essential for succeeding as a software architect. In this book, several military analogies are used to present relevant topics essential to the development of a software architect. This comparison recognizes that many of the same preparations used by the armed forces in training for battle have roughly equivalent activities in software development. Just as the army invests heavily in its recruits in order to produce well-trained, well-disciplined soldiers who are capable of succeeding in any situation, this text attempts to direct the reader into the specific areas that will provide the flexibility to succeed in most situations as a software architect in the industry. At the end of most of the chapters are exercises that are intended to aid in putting the principles discussed in this book to use as a precursor to using them in actual practice. Taking the time to read and think through these exercises will provide the reader with a valuable experience that will establish an excellent foundation for performing the same activities on an actual project. The book is organized in the following sections to convey specific categories of information: Industry Background and HistoryThe discussion of the current state of architectural approaches in Chapter 2 provides a common foundation of knowledge for new software architects and those who have been practicing software architects for some time. Topics such as the Zachman Framework, enterprise architecture, and architectural viewpoints are essential for communicating expertise in the area of software architecture. While the text does not attempt a comprehensive explanation of each of the major approaches in documenting software architecture, a general overview of each is provided along with the best available references. In addition, one major architectural approach is covered in significantly greater detail in order to provide a deeper understanding of the value such approaches provide and the level of effort they typically require on a project. In addition, such major architectural movements as design patterns, AntiPatterns, and software architecture reference models are also presented. Technology Trends and Architectural StylesThe major influence of technology on software architecture shows no signs of abating. In Chapter 3, object-oriented technologies and their benefits and downsides are addressed, as is the growing movement toward component technologies that emphasizes application and data separation over the data encapsulation approach of the object-oriented systems of the past decades. The influence of the Internet and the need for various incarnations of layered software architectures is discussed in considerable detail, particularly with concrete principles of the applicability of different architectural approaches to various design problems. Some discussion of the issues inherent in open source solutions versus the reliance on proprietary approaches is also covered because the impact of open source is expected to continue its explosive growth. TacticsChapters 4 and 5 are intended to emphasize the tactical elements required to be successful as a software architect. Chapter 4, "Software Architecture: Going to War," presents an overall architecture-centric development process. This process is intended to be a guide for software architects who must structure activities within a specific software development methodology. In addition, the new issues introduced by the development of distributed systems are covered in some detail, given that most new projects involve a number of distributed components, frequently over the Internet or other networking technologies where concerns for latency, reliability, and security are fundamental to technical decision making regarding system boundaries, technologies, and design principles. The primary duty of the software architect is to manage the complexity of the software development effort. Chapter 5, "Software Architecture: Drill School," presents a set of concrete heuristics to enable the software architect to address issues related to complexity management on a small scale. The techniques should be adequate for dealing with many of the short-term issues that arise, although they are no substitute for the long-range planning and overall leadership skills that are required for long-term success. StrategiesChapters 6 and 7 discuss skills that are highly strategic in nature and will be useful for long-term success in emphasizing quality in software development. The most powerful skill sets required are leadership and team building. Leadership is needed to focus the team toward a common goal, and team building is required to keep focus on the day-to-day activities required to ensure that a quality product is delivered. Also discussed is a seldom-covered topic in the software industry-the relationship between the project manager and the software architect. Chapter 7 discusses software processes and provides the tools necessary to make ongoing incremental improvements in the software development process. The information is applicable to all software methodologies and its lessons are not limited to technical concerns. Rather, the discussion of process improvement applies to general preparation and improvement and should be invaluable throughout any professional's career. ToolsSuccessful software architects must have available some basic tools of the trade. Chapter 8, "Communications Training," focuses on team building, as any successful architect will be required to be a unifying force for many software developers, and on the Unified Modeling Language (UML), a standard notation for describing software artifacts throughout the industry. This chapter also discusses model-driven architecture that proposes methods to ensure that software decisions are reflected throughout the design documentation and code base. Chapter 9, "Software Architecture: Intelligence Operations," discusses methods of continually staying current on software industry developments, particularly in the areas of specific domains. It is intended to provide the tools necessary for staying current with the rapidly changing software toolsets that are available. MindsetChapter 10, "Software Architecture: Psychological Warfare," is one of the softer chapters, focusing on the more intangible aspects of succeeding as a software architect. Of all the chapters, this one is likely to be the most controversial because the topics introduced are relatively new and somewhat less developed than the materials in other sections of the text. Finally, Chapter 11, "Software Architecture: Career Advice," provides valuable insight into how to manage a career as a software architect. The career path for a student of software architecture to an industry expert is explored. The lessons presented encourage the sharing of information and insight gained on software projects with the software community at large. |
![]() |
![]() ![]() |