In mathematics, abstraction is little more than substitution. This is what Wittgenstein was referring to when he said all logical propositions are tautologies--that all abstract notions can be reduced to compound statements containing what he called atomic facts.<p>"Abstract" needn't mean "vague" or "fuzzy." Consider your favorite high-level language, which necessarily compiles to machine code. The abstraction introduced by the high-level language corresponds precisely (for a target architecture) to a set of instructions that perform the intended function. That it does not do so <i>uniquely</i> is another matter, and perhaps this is the sort of gap you are (understandably) concerned about.<p>The argument that abstraction is inherently bad is demonstrably false. (If I've inadvertently constructed a strawman, I apologize, but that did seem to be the argument put forth.) Must I understand the computations--and they are computations!--occurring at the sub-atomic level to write a program? Certainly not.<p>Indeed, I claim there is a limit to the amount of raw information we can process effectively. Further, I claim that familiarity with a system or concept correlates with the amount of irrelevant information we can effectively categorize and ignore. I won't support these here, but I think they are reasonable, if imprecise.<p>Perhaps, then, the right amount of knowledge is the right amount of knowledge. At least some limited understanding of quantum physics is necessary to program a quantum computer, or a simulation of one, but my failure to write a correct or easily understood program need not precipitate replacing code with gates or something similarly tedious. Likewise, doing away with subclasses or generics or functions or structured programming constructs seems more an instance of throwing the baby out with the bathwater--possibly for the wrong reasons in the first place.<p>Tangentially, there's a wonderful correspondence between symbolic substitution and proof reduction that Phil Wadler explains in his paper "Propositions as Types," and there's a great talk he gives on the same. Here, abstraction is more or less the opposite of beta-reduction, which is just substitution, all of which is gloriously precise.<p>Wall of text aside, if the post's thesis was merely, "We should be more careful," then I could not agree more.