Bill Higgins has a nice post about the tension between transparency and abstraction
. I absolutely agree with his conclusion, namely, that abstractions are imperfect, and often that when they fail it's hard to reason about the roots of that failure because of the very abstraction itself.
There's a phrase from systems engineering that applies here, the principal of least astonishment
. When an abstraction fails, a well-designed one will (hopefully) fail in predictable ways. It's when an abstraction fails and
it fails in an unexpected way that we have evidence of a leaky abstraction
. Unfortunately, I don't think this kind of behavior is avoidable, although it is the case that tracing down the roots of such failures and then refactoring the stuff at those roots will generally lead to a better separation of concerns. The problem is, in software, we generally never take the time to do that refactoring, and so we occasionally continue to be astonished at the most inopportune times.
Quote of the day:(On visiting Western Europe for the first time) You have riches and freedom here but I feel no sense of faith or direction. You have so many computers, why don't you use them in the search for love?n