This book is for professional software engineers, software architects , software engineering managers, and MIS managers. The typical reader might be employed in the applications development group of a large company' IT department, work as a developer for a system integrator, or work as an in-house developer for a commercial software vendor. Most of the concepts presented here were developed on mid- to large- size software projects involving five to fifty software engineers. This is not to say these concepts are not useful or applicable if your project is smaller or larger than this. If you are managing a project with more than fifty software engineers , this book is more applicable to your project than ever. It' just that you may be too concerned with higher level management issues to have much time to deal with the actual software engineering process and will focus on the people and process issues. If your project has less than five software engineers, you still should read this book, since all the technology concepts presented remain applicable on even the smallest one-developer projects. Furthermore, once you prove your skills on a small project, you will undoubtedly be called upon to work on larger projects where the people and process issues become more important. Here is what each of you can expect to gain by reading this book.
For software engineers, this book might be best described by starting with what it does not cover. This book is not a basic "how to program" book for novice programmers. Neither is it programming language or hardware specific. We have used both Java and C to illustrate some of the programming examples, simply because of the popularity and familiarity of most programmers with one or both of these two languages. The principles presented, however, are generally applicable to software development in any programming language.
The type of programmer who will benefit from this book is the professional software engineer looking for a broad overview of the latest technologies being used by leading edge companies developing medium to large software projects. This book will also be useful to developers who perhaps have never had the opportunity to work with a group of developers on a large project and want to gain an insight to the skills that will make them successful in such an environment. Much of this book focuses on the design stages of software development and presents concepts and techniques bound to make even the most experienced developers more productive. Because of this book's focus on the design stage of software development, it also provides valuable reading to the software engineer who wants to transition into the role of software architect with additional design responsibility.
Besides providing lessons for the software engineer who wants to become more of a software architect, this book is also valuable reading for experienced software architects. It provides a good update for software architects who want to become familiar with the latest software engineering technologies such as component-based software development, multi-tiered network centric design, object-oriented technologies, and exciting new developments in the Java world such as Jini technology. Given the pace at which such new software technologies evolve , most software architects are likely to find several areas covered in this book in which they do not have hands-on experience. In addition to software technologies, this book provides software architects information on how to design software systems with "best practice" people and process techniques in mind. This will be very useful for architects who have a desire to move into software engineering management.
For software engineering managers, this book provides a unique perspective on the people and process issues surrounding software development. We have included chapters on how to identify, recruit, hire, and retain the best software engineers and architects. Managers new to software development will learn why the experience and skills of their software engineers and software architects will have a bigger impact on the success of their software project than in any other information technology area they might have previously managed. There is not, however, any special "management" chapter in this book. If you are going to be a successful software engineering manager you need to understand all the concepts presented in this book. Many other books concentrate simply on management skills and forget that the best managers not only understand what their software engineers are really doing, they understand what their developers really want to do. It follows that productivity is higher when software engineers are doing what, in fact, they really want to be doing. Once you understand these concepts, you will be better able to schedule and budget your software development projects to ensure their success on all levels.
Finally, this book will be useful to MIS managers up through Chief Information Officers (CIOs). While many such managers do not necessarily think of themselves as requiring any software skills, this book provides a unique insight into what is needed for successful software development. For starters, to achieve the greatest productivity, a software development group needs a good software development infrastructure. Software development environments have their own unique requirements for developer desktops, servers, and related network infrastructure. All of this falls under the control of an MIS manager somewhere in the organization. In addition, once software is deployed, which is perhaps the ultimate measuring ground of a project' success, MIS managers need to provide the proper production infrastructure. By understanding basic details about a software project, such as whether it is network-centric or host-based, MIS managers will be better able to provide the proper infrastructure. In turn , by understanding the deployment environment, software architects and developers can make the right design decisions early on and greatly simplify the job of their MIS brethren.