As they train to become a doctor, new interns are taught about many different diseases that produce various sets of otherwise similar symptoms. In conjunction with this new and complex knowledge, they are also taught this truism: “When you hear hoofprints, you must not initially assume a zebra is in the vicinity.” This pithy remark is meant to impart that, for instance, if a patient comes in bleeding from an orifice, one must not immediately assume that Ebola is in the building; more likely something much more common is in play, such as hemorrhoids or perhaps an unfortunate excess of enthusiasm coupled with a new, ahem, toy.
One of the clearer signs that I was becoming a competent programmer was that the problems in my code began, more and more often, to in fact, be zebras. Instead of a misplaced character or a missing clause or some kind of blatant conceptual error, the abject weirdnesses that were most often populating the realm of my final, demonstrably accurate diagnoses came to be things like operating system bugs, broken libraries, incomplete emulations and exotic compiler bugs. Zebras.
Read the rest of this entry »