“Debugging is the art of figuring out which of your assumptions are wrong.”
(Attribution unknown)
“Debugging is the art of figuring out which of your assumptions are wrong.”
(Attribution unknown)
One way is to reason from a false premise, or as I would put it, something we think is true is not true.
The other way is to mix logical levels (“this sentence is false”).
I don’t think I ever encountered a bug from mixing logical levels, but the false premise was a common culprit.
security with cryptography is mostly about logical level problems, where each key or operation forms a layer or box. treating these as discrete states or things is also an abstraction over a seqential folding and mixing process.
debugging a service over a network has the whole stack as logical layers.
most product management is solving technical problems at a higher level of abstraction.
a sequence diagram can be a multi-layered abstraction rotated 90 degrees, etc.