Debugging by the book

Experienced engineers know that one key difference between a good designer and a good engineer is the ability of the engineer to debug circuits and systems. Debugging takes a special blend of knowledge, intuition, experience, rational analysis, out-of-the-box analysis, attention to detail, and predictive ability. Software debugging, of course, is a different beast than hardware debugging, although often in the early stages of debug, it’s hard to say with confidence which is the problem. In fact, problems in one domain often appear as intractable problems in the other.

So, how do you learn debugging? There is no single or easy path, but experience is the best teacher. This is especially true when you can have a knowledgeable and battle-scarred veteran to guide you, act as a sounding board, and ask tough questions as you make the requisite assumptions and try to validate them. Like many other things in the real world, you get good judgment from experience, and you get the experience from-- among other things--bad judgment.

Debugging skills are not something you can learn in the classroom, or from sanitized, cookbook lab experiments. Schools and classrooms are not optimum places to learn debugging skills, not should they necessarily be; it’s beyond their primary mission and priority.

You might think that books are the last place to find help in learning the skill of debugging. In general, you are right. There are hundreds of engineering books published each year, spanning basics through extremely advanced topics. Many of these books cover material that has already been presented in other books, sometimes with a slightly new or updated perspective. But debugging books are either very rare, or are just simplistic guides to the obvious: check the power supply, look for bent leads, verify the right parts are installed, and so on. This is all good advice, but only a first level of suggestions.

There is one book I have found that fully addresses the art, skill, and methods of debugging. “Debugging: The 9 Indispensable Rules for Finding Even the Most Elusive Software and Hardware Problems,” by David J. Agans, carefully lays out debugging strategies, tactics, traps, and guidelines, supported by real-life, relevant examples that could only have come from someone with a significant amount of in-the-field experience. The only thing I don’t understand is how such an excellent book came to be published by the American Management Association. When I first saw the book’s title and publisher, I assumed it would be some high-level tome filled with vague, well-intentioned, Powerpoint-like generalities about how to manage the “process”. I am happy to report that I was very wrong!