Besides a knack for finding bugs, I also seem to have the ability to find missing "stuff" like a misplaced document or a piece of clothing. My wife on the other hand, for all her other excellent qualities, is terrible at finding things to the point where it has become something of a running gag between us. Additionally, I think that my finding skills have caused hers to completely atrophy and she will make only a token search for something before turning it over to me. As I've looked at the difference in the way that we each approach the process of finding, I've noticed some key differences that have led to me believe that one of the underlying skills for good debugging is a good sense of how to find something. Here are few differences between us:
- Confidence - When I go to look for something, I am certain that it will be found. My wife is always convinced that it is lost forever and I think that colors her approach.
- Systematicity - I check and recheck a sequence of areas moving from area of highest likelihood to least likelikhood. My wife tends to look quickly through a series of places hoping that it will be easily found and often fails to recheck high likelihood areas. This probably goes back to the confidence issue.
- Region Expansion - If after exhaustive search of likely areas I turn up nothing, I will expand the search area to include places where it "couldn't possibly be", and am not surprised to find things in those places. My wife always tells me I'm "wasting my time" since she "never would have put it there." But after turning something up in an unusual place, she generally has a perfectly good explanation for how it wound up there.
Believe it or not, I think I was actually trained to be a good finder at a young age. For instance, my mother created a game called "hiding in plain sight" where I would leave a room and she would hide a very conspicuous item, like a large doll or a colorful block, somewhere in the room. The only rule was that the item had to be completely visible as you walked around the room, in other words, it might not be visible when you first stepped in, but it would never be in a drawer or buried under a pillow. This should give you an idea of what my childhood was like.
Anyway, you might think this greatly limits your possibilities of places to hide something but in fact it really does not. You would be surprised how hard it can be to find even a very noticeable item in a room full of other stuff. I remember going through a series of increasingly sophisticated strategies. At first, I just kind of walked around hoping to spot the item. Then I started focusing more on figuring out where the good hiding places were and checking them first. I also got better at picking out the shape and color of the item and focusing on those features. As I got better, my mom also came up with little things to make it trickier, like hiding the item in the same place in succession, or adding similar items to the room.
The tricks I learned from this game have carried over into my work finding bugs. I always like to reiterate that debugging is a teachable skill, and I think it's clear that many of the underlying skills that constitute the process are teachable as well. As I do this exploration of debugging concepts on this website, I will try to illuminate and discuss these underlying skills as well.
