The Debugging Mindset
I have always used a step-debugger for debugging and personally find the process somewhat thrilling, especially when debugging other peoples code and learning all the tricks and techniques that they are using to get the jobs done.<p>I don't know how much time and effort I have saved over the years using tricks I gleaned stepping through code written by people much smarter than I.<p>There is simply nothing that comes close to learning and debugging code line-by-line, examining variables and taking branches in real time.  In fact, how people can debug large existing codebases <i>without</i> a debugger is beyond me.<p>Of course, nowadays in modern webdev it seems that most developers no longer use step-debuggers and, in general, want to rewrite the app in whatever stack will look best on their resume and/or sound impressive in the pub or gym afterhours.<p>I long ago gave up poo-pooing the importance of social signalling within the young-ish developer community, something that really did not exist when I was 20-something as programmers had few choices about the stack.<p>I really love the jist of the OP, and agree that the misapplication of the programs mental model is the underlying cause of almost all bugs.  This mental model is what I'm always trying to load fully into my brain as, IMO, true productivity occurs when I have it fully loaded and I am confident that I am covering all the edge conditions.<p><i>Debugging must not be an afterthought in educating; industry must stop insisting that bugs be interpreted as failures of individual programmers ... </i><p>Funny...I've really never separated debugging from developing as they always go hand in hand, and certainly have never thought that bugs signify "failure".  In fact, to me it represents progress...