In my first post on this subject, I introduced the concept of separating debugging and development as related but different skills. I will further explore this distinction and hopefully highlight the value of debugging as a tool in your technical arsenal.
The Value of Debugging Part 2: What They Don't Teach You in School
// in TechnologyDebugging has always been one of my stronger skills as a developer, so naturally I think it is pretty important. I view it as an extension of tinkering - taking things apart to see how they work, modifying them and putting them back together. Most people enjoy the creative process. Taking something from your head and transforming it into something real is amazing, but I relish the chance to take something apart and improve it. If it was my creation to begin with, I also get to see how I initially thought about the problem and how my knowledge or approach has changed over time.
Debugging makes the difference
When I was in school (both as a student and as a teaching assistant), nearly all of the focus of the software development instruction was on languages, algorithms, efficiency and organization. All of those things are vital, but one of the largest variances I saw among the best performing students was their ability to quickly and consistently debug problems. When implementing a recursive search routine or Dijkstra's algorithm for graph traversals, the objects and code may be simple, but the resulting behavior is complex and likely to result in confusing errors.
Most students would go from algorithm to code to execution in about the same time, but as soon as something broke, the differences became apparent. Naturally good debuggers would quickly isolate the issue, correct it and start the loop all over again - while other students struggled to step through the code in their head or on the computer. This process is sometimes referred to as the OODA loop for observe, orient, decide and act.
With the bulk of the instruction on analyzing problems, distilling solutions and implementing those solutions as efficiently as possible, there is little room left for the nuances of debugging. If we were all perfect, those lessons would be all we needed. But in reality, we all introduce faults into our code - misunderstanding the problem, logic errors, typos, incorrect variable references, race conditions and a number of other things. These lead to incorrect and possibly erratic behavior. Learning how to isolate and recreate the error, to intelligently crack open the black box, is an equally important skill.
Be a better developer: learn a multitude of debugging techniques
Because it is so overlooked pedagogically, differences in debugging ability in the ranks of new developers is largely a component of talent or personal diligence. Going from your mostly-homegrown academic work to an established, and potentially old, suite of existing code is really going to test your ability to poke around the edges of a problem and make strategic forays into the depths of the system. Sometimes you won't be able to fire up GDB or step through your code in debug mode. Other times, you won't be able to insert print statements or modify the logging. There will be times when you won't be able to do either. The better your arsenal of tools, techniques, intuitions and experiences, the more effective a debugger and, ultimately, developer you'll be.
READ MORE.