Cargo-cult programming and Leaky Abstractions
Scott Hanselman recently wrote about cargo-cult programming which reminded me of Joel Spolsky's piece on Leaky Abstractions (which I think about often when working with ASP.NET).
“...tools which pretend to abstract out something, like all abstractions, leak, and the only way to deal with the leaks competently is to learn about how the abstractions work and what they are abstracting. So the abstractions save us time working, but they don't save us time learning.“
Just “getting by” without knowing what's going on under the covers is especially dangerous with new abstractions (which we are always dealing with in technology). After a while things do seem to settle in so that you can begin to forget about the underlying technology. I think this isn't so much because the law of leaky abstractions doesn't apply anymore, but rather because things seem to get more stable over time, and just break down less often. Today we can drive a car while being ignorant of how a car engine works because they rarely break down, but this was not the case in the very early days of automobiles where you had to be able to fix them on the road with spare parts you always carried with you.
But when something goes wrong and you are responsible for fixing it, accept this fact...at some point you will need to learn what's going on under the abstraction, unless you can pay for a mechanic who does. Like the soldier probing for mines in Scott's post, the approach of just sprinkling a little code here and there and praying that it fixes it will eventually blow up, if not this time, then next time.