http://www.perlmonks.org?node_id=76174

Three times in the last week, while coaching people through some thorny debugging problem, I've found that their bag of debugging tricks didn't seem to include the old standby of writing code to sanity check data structures before the program goes kaBOOM. What I observed was that they tended to run their programs until things went boom, and would then poke around the wreckage in the debugger looking for clues. If this meant restarting in a debugger, they would put a breakpoint as close to the explosion as they could. Not a bad first approach, but if it is the only one you try (and you never look upstream), a lot of problems will remain elusive.

When I asked them "what's the earliest time you think the underlying problem might be occurring, and what's the simplest check you could put into the code to detect it sooner?" they all gave some variant of an "oh, wow, what a good idea" response.

These were all people with 2-4 years of experience.

So I'm wondering: Are the available of good debugging tools actually making us less capable of debugging by appearing to remove the need to think deeply? Have we moved out of our Pioneering phase, where individuals have to be resourceful to survive, and into a Settler phase, where people can usually rely on someone else to provide the debugging service for them, and then let those skills atrophy?

What are you seeing? Are "kids these days" more, or less capable debuggers? What's in your bag of debugging tricks that seems to be missing in others'?


Clarification: I'm not talking about the debugging skills (or debugging avoidance skills) that people apply to their own code. This question goes to the skills that need to be applied when working in a multi-100Kloc system.