****** - Verified Buyer
4.5
Thoughtful programmers often discuss "why is software terrible" and "why can't we be like the real engineers?" This is a thoughtful book-length answer, from a reasonably senior engineer with a wide breadth of experience.I am not certain who the right audience is. The book makes some gestures at being accessible to non-programmers, but I suspect they would find parts of it heavy going. (E.g., the description of buffer overflows in C programs.) If you have a semester or two of programming, or some experience writing scripts and suchlike, you probably have enough background. On the other end, I am a senior software engineer and I have a PhD in computer science with a particular focus in software engineering and social aspects of programming. So I am probably about as expert a reader as there is. I felt like a third of the book was review for me, another third was an interesting and useful presentation of stuff I half-understood, and another third was genuinely new insight.The book opens with a biographical pattern, following the author as he moved from PC BASIC, to Princeton, to working for a software company, to Microsoft. The biographical structure is mostly a hook to give the author's perception of the development habits in these different communities and the problems they each produce. Old-style BASIC, for instance, inevitably degenerates into spaghetti code; C tends towards subtle string and memory problems, small software companies used to have a culture of "throw it over the fence once it compiles and seems to work for the dev", and Microsoft in the 1990s tended to emphasize trivial style rather than deep design in code reviews.The second half of the book breaks from biography and is a series of focused studies of various topics. I thought this was the stronger part of the book. The author points out that we *do* know a number of things that would help -- systematic structured code-reviews with definite things to look at, better languages, better tools, formal methods, etc -- and we mostly just don't bother. A great deal was worked out in careful scientific studies in the 1970s by old-line hardware companies -- and then the microcomputer people assumed it didn't apply, were too small to do their own studies, and just forgot about it.I wish the author dug a little deeper into the social dynamics here. Why are programmers so resistant to best practices? Why don't engineering managers and CTOs push? Yeah it's more fun to code than to write test plans, but debugging production failures is even worse, and probably we'd get used to the test plans. Is it that too many engineers started out self-taught? That academics don't bother to teach software engineering because school assignments are too small?Even without a careful set of recommendations, there's a great deal of thought-provoking material here and I recommend the book highly. You could use this as a good course book in an undergraduate or masters-level software engineering course.