In this book, a leading Sun Microsystems consultant presents start-to-finish techniques for software development, covering all three key elements of success: people, processes, and technology. Learn how to build a winning software development team, organize that team for success, and retain your best talent in today's extraordinarily competitive hiring environment. Learn how to use OO techniques from planning through testing. Understand the best ways to leverage RAD techniques, utilize standards, measure software quality and productivity--and improve them.
Review By: James T. Heires 09/11/2002This book is a broad-brush overview of the people, process, and technological issues surrounding software development. The author includes an impressive amount of information into 350 pages. The major sections of the book cover an overview of software development, people issues, software development processes, and technology-related matters.
The first section is 68 pages and discusses Hamilton’s “10 commandments of successful software development,” a definition of software development, why software development is difficult, and some recent technical trends in software development. The second section is 78 pages and concentrates on the people issues including how to hire, train, retain, and transition staff as well as how to organize for success. The next section is 50 pages of discussion about the software development lifecycle (including the CMM), the rapid application development methodology, software quality, a Web-centric production acceptance procedure, and productivity/metrics issues. The final section is twice as long as any other section and deals with technology concerns such as programming language features, development tools, selecting hardware, component-based development, optimization, Web development, and distributed applications. The appendixes are made up of software development frequently asked questions (FAQ), Java coding standards, and a sample internal support agreement.
The book also contains a table of contents, list of figures and tables, a foreword, introduction, bibliography, and glossary.
Describing software development in one volume is a tall order, and I applaud the author for giving it his best. However, he attempts to cover too much material in 350 pages. At times, I felt like I was reading the author’s biography, as opposed to a book about “Building Reliable Systems,” as the subtitle teases. Even though he has an impressive understanding of the software development landscape and has included many up-to-the-minute technologies and case studies, his “Cliff’s Notes” treatment of software development needs a stronger foundation (and more pages) to support his concepts. Many times in the book, the author begins to discuss a study or a standard, but fails to give a reference so that the readers may follow up on their own to learn more. For example, unit testing earns only one short paragraph, while selecting hardware garners 27 pages.
The book is well organized, insightful, and easy to read. The author’s simple illustrations were sporadic, yet useful. Uncomplicated C and Java code segments are occasionally but effectively used to support various topics. As inexcusable as it may seem, the book has a few nagging typographical errors as well. The glossary and bibliography are too short to be of much assistance.
The first section of the book, which includes the “10 commandments of successful software development,” came off the slightest bit biased towards Sun technologies. For example, object-oriented technology (closely related to Sun’s Java initiative) is espoused here, but may not be very important to a more traditional IT shop.
The second section of the book contains an effective treatment of the people issues associated with software development. Attracting, training, and retaining software professionals has become a major concern for many enterprises. Example job descriptions, applicant interviewing techniques, and retraining strategies make up the bulk of this useful section. Lots of good creative ideas are presented and can be implemented quickly.
The next section covers process-oriented concepts. The software lifecycle is described with references to SEI’s Capability Maturity Model for Software. The Rapid Application Development (RAD) methodology is described in six pages, although it’s not clear why this methodology received special attention above all other methodologies in existence today.
The final section of the book discusses the technology of software development. This includes a handy chapter on programming languages with the most real estate given to (you guessed it!) Java. Likewise, the chapter on software development tools is almost entirely made up of tools that support the Java language. A small consolation is that this section provides reference URLs for more information on many tools. A disproportionately large chapter on selecting hardware is followed by only five pages about component-based development.
Applicability to the SQA and testing disciplines is thin, outside of a short mention of software standards, Java testing tools, and the validation and testing part of the software development lifecycle.
Overall, the book is a reasonable overview of modern practices and technologies, but the reader will certainly need supplemental information in order to complete their study.