NOTE: This blog has been moved to http://www.looksgoodworkswell.com

Sunday, December 16, 2012

Indispensable Principles for Debugging - Book Recommendation

Don't judge a book by it's cover (or it's website... or it's poster). Especially true in this situation. David Agan's book "Debugging: The 9 Indispensable Rules for Finding Even the Most Elusive Software and Hardware Problems" is a great find, chocked full of simple wisdom on how to find and fix bugs. Some of you will be turned off by his use of Comic Sans (see his note at the bottom of his website for his funny comment on why he sticks by his comic sans guns).

What it is not.
It is not a tutorial for any debugging tool. It is not a primer for debugging in any specific language. It is not an exhaustive tome on debugging. It doesn't have specifics on debugging for the web.

What it is.
Short and sweet. It contains 9 principles that are timeless and can be applied to any system you are trying to debug. Timeless aspect.

Why this book?
I have often wondered why some engineers seem to be able to debug and fix issues and others just create a mess when they try. Of course some minds work in a more systematic manner than others and some have more insight. This book teases out the principles that underly finding and fixing issues. The principles are dead simple and completely obvious when you glance at them. But I promise you that a lot of our colleagues don't practice even a portion of these.

I also like this book because it is a little older and it doesn't try to tie itself to the current trends. One of his first "war stories" is about debugging one of the original Pong games. Love it. First published in 2002, and then again in 2006, it is kind of hard to find. I bought the last 7 copies from ebay today but you can get it from the kindle bookstore.

Nine Principles

  1. Understand the system
  2. Make it fail
  3. Quit thinking and look
  4. Divide and conquer
  5. Change one thing at a time
  6. Keep an audit trail
  7. Check the plug
  8. Get a fresh view
  9. If you didn't fix it, it ain't fixed

Do you have other suggestions for teaching the basics of debugging? Comment below.