Series: The Morgan Kaufmann Series in Software Engineering and Programming
Hardcover: 282 pages
Publisher: Morgan Kaufmann; 1st edition (July 17, 2002)
Product Dimensions: 9.5 x 7.6 x 0.9 inches
Shipping Weight: 1.8 pounds
Average Customer Review: 4.5 out of 5 stars See all reviews (2 customer reviews)
Best Sellers Rank: #3,187,812 in Books (See Top 100 in Books) #12 in Books > Computers & Technology > Programming > Software Design, Testing & Engineering > Reengineering #892 in Books > Textbooks > Computer Science > Object-Oriented Software Design #3038 in Books > Computers & Technology > Programming > Software Design, Testing & Engineering > Object-Oriented Design
The authors wrote better than they knew. My own experience is that reverse engineering is at least 20% of a typical software engineer's typical day. It's the study that a developer puts towards understanding a system well enough to make necessary changes, rediscovering enough about the system to enable the task at hand. The authors addressed their book to specific re-engineering projects, as isolated events, but they really wrote about the everyday life of almost every programmer.As Johnson points out in the foreword, much if the information has an "everybody knows that" feel about it. I found a few new tips or new phrases, but mostly I found a clear, systematic organization of facts and techniques that are widely applied. The authors' arrangement of known techniques makes them especially valuable, much the way an arrangement of ordinary playing cards can become a valuable hand in poker.Among other things, these authors are the first to convince me that software metrics can be a net gain to a developer. My own, sad exposure to metrics has been normative, a stick wielded blindly in the name of misunderstood "quality". This book shows how to use metrics in a constructive, exploratory way. The complexity (or whatever) scores are not the output of the process, they are intermediate results to be discarded as soon as they've pointed the way to the real problems.I found only a very few points to disagree with. For example, the authors point out pros and cons of prototypes, but missed the biggest danger of a working prototype: that, no matter what caveats are given, it can be mistaken for a real system. Over-eager clients or managers driven by a false sense of efficiency may demand that the developers just add a feature or two (usually, system's entire capability) and ship it tomorrow.