To add to this, I’ve noticed something that I do when I’m programming is rely on various constructs/built-ins that I have a solid gears-level model of. I often find myself unwilling to use functions/constructions where I don’t understand why they do what they do because I’m worried that the code might cause unintended effects that cause bugs, especially since debugging is extremely difficult without gears-level models.
I think the ideal programmer maintains probability distributions over whether or not they understand what various parts of their code is doing. If there is a bug, then they have some weighting over where the bug probably is, enabling faster debugging.
To add to this, I’ve noticed something that I do when I’m programming is rely on various constructs/built-ins that I have a solid gears-level model of. I often find myself unwilling to use functions/constructions where I don’t understand why they do what they do because I’m worried that the code might cause unintended effects that cause bugs, especially since debugging is extremely difficult without gears-level models.
I think the ideal programmer maintains probability distributions over whether or not they understand what various parts of their code is doing. If there is a bug, then they have some weighting over where the bug probably is, enabling faster debugging.