I think the whole experience is also interesting on a meta-level. Since programming is essentially the same as logical reasoning, it goes to show that humans are very nearly incapable of creating long chains of reasoning without making mistakes, often extremely subtle ones. Sometimes finding them provides insight (especially in multi-threaded code or with memory manipulation), although most often it’s just you failing to pay attention.
Threading is not normally part of logical reasoning. Compare with mathematics, where even flawed proofs are usually (though not always) of correct results. I think a large part of the difficulty of correct programming is the immaturity of our tools.
I think the whole experience is also interesting on a meta-level. Since programming is essentially the same as logical reasoning, it goes to show that humans are very nearly incapable of creating long chains of reasoning without making mistakes, often extremely subtle ones. Sometimes finding them provides insight (especially in multi-threaded code or with memory manipulation), although most often it’s just you failing to pay attention.
Threading is not normally part of logical reasoning. Compare with mathematics, where even flawed proofs are usually (though not always) of correct results. I think a large part of the difficulty of correct programming is the immaturity of our tools.