I really don’t know how I’m so good at debugging. Obviously some of it is smarts and experience, but a lot of it is definitely techne: little things I know to do because they will help me solve the problem, but I don’t have a systematic way I could describe it to anyone else.
My best guess is that I have a combination of two behaviors that do most of the work. The first is persistence. I’m unwilling to give up until the bug is fixed, or we at least understand the bug and why fixing it isn’t worth it. The second is a need to build up a model of exactly how the code works, and looking hard to fill any gaps in my understanding. Combined, I just keep hammering away at a bug until I understand exactly why it’s happening, which gives me the knowledge I need to solve it.
Everything is feels like little things that reduce the friction. Valuable, but I would still debug issues without them, it would just take longer.
The second is a need to build up a model of exactly how the code works, and looking hard to fill any gaps in my understanding.
Yep. One concrete thing this sometimes looks like is ‘debugging’ things that aren’t bugs: if some code works when it looks like it shouldn’t, or a tool works without me passing information I would have expected to need to, or whatever, I need to understand why, by the same means I would try to understand why a bug is happening.
I really don’t know how I’m so good at debugging. Obviously some of it is smarts and experience, but a lot of it is definitely techne: little things I know to do because they will help me solve the problem, but I don’t have a systematic way I could describe it to anyone else.
My best guess is that I have a combination of two behaviors that do most of the work. The first is persistence. I’m unwilling to give up until the bug is fixed, or we at least understand the bug and why fixing it isn’t worth it. The second is a need to build up a model of exactly how the code works, and looking hard to fill any gaps in my understanding. Combined, I just keep hammering away at a bug until I understand exactly why it’s happening, which gives me the knowledge I need to solve it.
Everything is feels like little things that reduce the friction. Valuable, but I would still debug issues without them, it would just take longer.
Yep. One concrete thing this sometimes looks like is ‘debugging’ things that aren’t bugs: if some code works when it looks like it shouldn’t, or a tool works without me passing information I would have expected to need to, or whatever, I need to understand why, by the same means I would try to understand why a bug is happening.