Software organizations are looking at a very different world from that of a few short years ago. The whole planet is wired, with shopping and banking done from living rooms as well as from brokerage houses . In the enterprise arena, mainframe applications continue to give way to client/server and multi- tier systems. Desktop PCs are commonplace and practically disposable. Network PCs, the new appliances, will soon be ubiquitous. Soon even our current household appliances will reside on a network.
Fortunately, software developers have many new software tools and technologies on which to thrive in these changing environments. There are new programming languages and modernized versions of old ones. C++ is (finally!) an international standard, with a standard library that makes the old arrays and "char-stars" obsolete except for uses in low-level systems and embedded software. Java's success as a new language is unparalleled due to its safety, portability (write-once run anywhere ), and incredibly rich Core APIs. Visual Basic has proven that software components really work, and enjoys wide popularity for writing clients and now even middleware business objects. (FORTRAN and COBOL are still with us, and may even persist long enough for a Y10K problem to arise.)
Developers are also working differently. They have builders and visual environments. They are not writing as many "monolithic" applications instead they are employing frameworks, implementing plug-ins, and writing more and more components. Whether components are JavaBeans or ActiveX controls, or live in a CORBA-wired enterprise, these reusable binaries have had and will continue to have a profound impact on the development, marketing, and sale of software. Componentware takes us beyond object-oriented programming; component-oriented programming has us now paying more attention to reusable architectures and design patterns, using interfaces, and relying less on inheritance and more on composition.
These rapid technological advancements have created new, and highly significant, problems in the people and process domains. In the people domain, new positions , such as Toolsmith, and of course Webmaster, need to be filled. Retention has become a critical issue for many organizations in these days of escalating salaries. Managers need to work in an environment with no small number of arrogant , overpaid and underdressed programmers who take pride in far outperforming and outproducing their co-workers by factors unheard of in other industries.
On the process side, new development methodologies are being created as the rush to move away from mainframes creates real worries about causing a move away from mainframe data-center-oriented disciplines. The basic production challenges still remain : producing software is different from producing other commodities, software is "too flexible" to maximize reuse under tight schedules, and so on. New challenges in verifying massively distributed systems with thin clients are requiring new approaches to the acceptance process. What is clear is that these people and process challenges are not met by applying generic management theories .
Software Development is a book that anyone in the software industry can, should, and would certainly want to read. It provides a unified treatment of people, process, and technology issues without falling into the trap of being too broad and shallow in its coverage. The author has had years of experience in both management and software engineering, and writes with authority in both voices. Managerial types will find useful information on recruiting, organizing and retaining talent, employee profiles, how software quality can be measured, how to use domain experts, and answers to common questions such as "make vs. buy." Developers will no doubt be interested in the technology sections covering programming languages, tools, hardware, multithreading, componentware, distributed architectures and Jini. However, one of the real strengths of the book is how readable the technological sections are to managers and the people and process issues are to developers. Managers need to understand the technology and developers can not be isolated from process and management issues. A pipelined organization where design hands off to development which hands off to QA which hands off to rollout is an organization that will fail; everyone in the organization needs to be involved throughout the entire software life cycle. Developers need to communicate with users while requirements are being gathered; everyone should participate in testing and deployment. This is the book that gives everyone the big picture.
We still live in a world where the majority of software development projects are late and over budget. This indicates that making a project successful must be hard (which is no surprise because, as Booch pointed out, software is inherently complex). Many people have offered advice to make software success a reality: some with academic theories, some with managerial theories, some with new technologies, some with process model blueprints to follow, some with case studies. Software Development tells you what you really need to know with the perfect mix of people, process, and technology issues. You will learn what successful organizations do to succeed, what causes projects to fail, how to build and retain a winning team, and get a comprehensive tour of today's brand-new and cutting-edge technologies. You will find solid information that you can put into practice today to make your development efforts successful.
Dr. Ray Toal
Professor of Computer Science
Loyola Marymount University
Los Angeles, California