Tuesday, September 30, 2014

From the annals of software development comes an interesting
illustration of the difference between what one knows and what one
doesn't. The below are lessons a coder learned from a bug report that
bizarrely (but correctly) stated that attempting to print an example file would
jam the printer:

Just because a bug seems impossible doesn't mean it is.

Abstractions are everywhere, and they can be broken. As a software guy, I
believed that getting the paper into the output tray was a solved
problem.

The author uses the term "abstraction" in a sense peculiar to his area of
expertise, meaning an
omission of "details which matter in practice, but are immaterial to the
problem being solved".

The programmer reasonably thought -- but did not
actually know -- that a step between the printing command and the
physical document was solved. He did not know this because he did not know in
detail how the printer worked. It clearly behooves us to be aware of what we
really do know versus what we merely assume.