In an attempt to lay out a lot of ideas all at once, I decided to join up with the National Blog Posting Month, the lazy (or let's say, time-challenged) stepcousin of National Novel Writing Month. The idea is pretty straightforward: just post every day for the entire month. I decided that I will use this opportunity to lay out what I see as the major pieces of the skill and theory of Distance Debugging in the hopes that others will comment and improve on the ideas, or at least tell me if this stuff is trivial or plain wrong.
I'd like to start by talking about the skill of debugging, leaving distance debugging aside for the moment. I was having a conversation with my dad the other day about how he was dissatisfied with the company that provides his firm with IT support. I made the offhand comment to him that the problem is not that they don't care about problems, it's that they aren't any good at finding and fixing them. To me, this is a critical but hidden issue. Everyone has their favorite horror story about technical support, but no one seems to be stopping to say, "hey, maybe we should think about how to get better at fixing things."
In the world of software development, the problem gets worse. Estimates vary widely on the amount of time the average developers spends debugging, but there is general agreement that it's at least 50% of their time (and up to 80% or more). However, while there are a zillion books that can teach you the basics of programming, and hundreds of titles devoted to every miniscule aspect of design, there are only a handful of titles devoted to debugging. Why is it that the thing we probably spend the most time doing is the hardest to get any good information about?
I honestly don't know, but I have a few ideas:
- Debugging is seen as something you either know how to do or you don't. It's not teachable, so why write or read a book about it. This is probably totally false.
- Debugging is seen as something that you pick up through experience, and that's the only way to do it. There's no point in trying to come up with a curriculum. It's true that experience helps, but this kind of argument is always made in nascent domains.
- There isn't a good theory of debugging, so we wouldn't know what to teach. This is partially true, but as the few books on the market show, you can have a set of rules or guiding principles as you do in any scientific field.
So I'm starting with the assumptions that debugging can be taught, that it is very important to teach, and it's really just a matter of figuring out what to teach. Having worked in the field and displayed a knack for finding and fixing problems, I think I have a coherent way of describing the process. I come from a different perspective because I believe that most real-world problems have an element of distance in them (more on this tomorrow) and this is where the current thinking in the field falls short.
Tomorrow's entry: Distance is Everything.