Robert Glass is a man who knows a lot about software engineering, he has written over a dozen books and writes regular columns in programming and computing publications that work towards his, self-confessed, goal of trying to bridge the academic and professional sides of software development.
In this book the author gathers together 55 'facts' and 10 (5+5) fallacies that have been discovered in the short history of software development (these are, by the author's own admission, somewhat arbitrary. But this doesn't make then any less valuable). The facts are a collection of things that have been nearly forgotten, ignored, accepted, accepted-but-controversial or just controversial. For instance, Fact 52 states 'Efficiency stems more from good design than from good coding' and goes on to argue that if you want an efficient program you need to design it in from the beginning. The author then takes a swipe at eXtreme Programming which, from his point of view, skips design in favour of coding and refactoring. He believes this is a big mistake. This is highly controversial, and would be regarded as heretical by the adherents of eXtreme Programming, but provides interesting food for thought to the more conservative/balanced amongst us.
Some of the most interesting facts, and ones that might cause most heated discussion, are the ones that use studies of various aspects of software development to show how wrong the accepted wisdom can be. A good example of this is Fact 31 'Error removal is the most time-consuming phase of the life cycle'. The author, in a previous book, has shown that error-removal accounts for about 40% of the total time of software development. This is far, far less time than most developers expect, and more importantly, plan for and is a fact that most developers find very difficult to swallow.
The fallacies are a smaller collection of far more controversial topics that, if the reader can enter with an open mind, will provide illuminating, if just for the personal reaction they invoke! It is interesting to read the author's take on one of the favorite mantras of the open source movement: "given enough eyeballs, all bugs are shallow" which can be summed up as "there is no evidence". Highly controversial, but it is interesting to read an evidence-based approach rather than one based on who can shout the loudest.
The 55 facts and (5+5) fallacies concerning the development of software are divided into four chapters covering the facts and three (much shorter) chapters covering the fallacies. Each of the chapters groups the facts/fallacies together into related areas. The four fact chapters are about Management, Life Cycle, Quality and Research (although this chapter is a little thin, having only one fact in it!). These chapters cover all areas of software engineering including sections on People, Tools, Estimation, Requirements, Design, Coding, Testing, Reliability, Quality etc.
The fallacies chapters are about Management, Life Cycle and Education and the sections mirror sections in the facts chapters covering similar topics.
Each fact, or fallacy, is stated laid out in an identical way:
- The fact, or fallacy, is stated.
- There is a discussion section where the fact is expanded upon and the evidence for it is presented. Some of these discussions are a couple of paragraphs, some several pages.
- Controversy, or the lack of it, is discussed. This section covers opposing views, how different methodologies view the fact and what people believe to be true rather than what has been measured.
- Finally, there are two sections covering sources and references.
The consistent style makes this book very easy to dip into, especially as the facts are summarized in the table of contents. The writing is great, as you would expect from somebody who has made a career out of writing about software engineering, being clear and at times dryly humourous.
This book a great introduction to the (sometimes murky) waters of software engineering for the scientist-programmer. For people who don't care about the 'religious' wars that rage in software engineering, this book provides highly condensed information on some of the unwritten rules and sacred cows of software development that are never taught directly but are picked up as one works in the industry. It is also a great source of references to academic work done on software engineering, which is pretty thin on the ground, but provides a refreshing alternative to opinion and belief which is otherwise rampant.