Most software engineers are fond of a certain programming practice known as "encapsulation". The gist of it is that you want to put the code you write into a "black box", so that people who build on it can use it without worrying about how it works. It's a simple idea, but it has proven to be remarkably effective; in theory, it allows an engineer to completely rewrite the inner workings of one portion of a program without having to change a thing elsewhere.
Software engineers aren't the only ones who make use of this idea. The world has grown steadily more complicated over the past few millennia; the sum of human knowledge has become far too vast for any one person to absorb even in CliffsNotes form. Thus we find ourselves putting most phenomena outside our own areas of specialty into black boxes. I have one black box for quantum mechanics, another for neurophysiology, a third for microwave ramen, and so on. I have only a vague idea how these things work; it is sufficient for me to know that they do work, and to understand how they apply to my day-to-day life.
That's all very well and good, but excessive reliance on encapsulation can be dangerous. If there is one thing humanity can be counted on to do, it is to take a good thing too far. Let us examine, for a moment, the consequences of encapsulation as applied to the automobile. Assuming, like me, you are a human being above the age of two with no major learning disabilities, you are probably at least passingly familiar with the basic user interface of a car. There's a steering wheel, pedals to accelerate and decelerate, and a bunch of other knobs and levers to experiment with if you're feeling adventurous. But what would happen to our familiar car interface if tomorrow someone discovered an efficient, cost-effective way to build cars that run on water instead of petrol? The answer: nothing at all. We'd stick to the tried-and-true design we all grew up with; changing the internal mechanism of the car shouldn't greatly affect how we interact with it. This, again, is the idea of encapsulation.
And herein lies the problem; when a tool works as it should, we pay no attention to its mechanism. Most of the complex tools we regularly use today are reliable enough that we comfortably forget how they work, but they are still unreliable enough to fail on rare but inconvenient occasions. Most of us have lost a paper the night before it was due, or had a car break down on the way to the airport. Yet surprisingly few of us take the time to learn how to troubleshoot these situations. In my opinion, if it's worth learning how to properly use a tool, it's worth learning how to troubleshoot it.
What got me thinking along these lines was an incident I recently witnessed while waiting for a bus outside an overpriced mall. A car had been parked on the curb for a few minutes, and evidently quite liked it. On being asked to start, it responded with a sad sputtering noise probably indicative of a dead battery. A middle-aged man got out and hesitantly poked at the engine for a while with a brush. He then began asking passers-by if they knew anything about cars. After several people apologetically admitted that they weren't "car people", somebody finally realized that the problem might lie with battery. He eventually retracted this hypothesis on the grounds that "the engine was making a grinding noise, but if the battery was truly dead, it wouldn't do anything at all".
Now, I'm no car person myself. I don't drive one; I rarely ride one. When cornered into a discussion on, say, the relative merits of the Dodge Challenger and the Chevrolet Camaro (assuming those cars exist), my contribution usually looks something like this: "Well, the one on the right looks a little taller, so I suppose that might be a disadvantage if you had to drive under an extremely low bridge.". And yet I found myself on equal footing with people who spend substantial portions of their lives on the road. Perhaps drivers' license tests should incorporate some basics of car maintenance: changing tires, checking oil – things of that nature.
Considering how this attitude of black-box-ignorance filters down to all spheres of human activity, I suppose it is unreasonable to be surprised that billions of dollars are wasted annually by poorly informed computer users opening BlatantlyObviousComputerVirusBwahaha.bat. I have often wondered whether it would be feasible to require some sort of license before a person is allowed to access the Internet.
(Oh, in case you're wondering, the dead-battery guy eventually drove off perhaps half an hour after the problems began. I didn't get to see the whole thing, but it looked like a mall security guard pulled up and jump-started the battery.)
Software engineers aren't the only ones who make use of this idea. The world has grown steadily more complicated over the past few millennia; the sum of human knowledge has become far too vast for any one person to absorb even in CliffsNotes form. Thus we find ourselves putting most phenomena outside our own areas of specialty into black boxes. I have one black box for quantum mechanics, another for neurophysiology, a third for microwave ramen, and so on. I have only a vague idea how these things work; it is sufficient for me to know that they do work, and to understand how they apply to my day-to-day life.
That's all very well and good, but excessive reliance on encapsulation can be dangerous. If there is one thing humanity can be counted on to do, it is to take a good thing too far. Let us examine, for a moment, the consequences of encapsulation as applied to the automobile. Assuming, like me, you are a human being above the age of two with no major learning disabilities, you are probably at least passingly familiar with the basic user interface of a car. There's a steering wheel, pedals to accelerate and decelerate, and a bunch of other knobs and levers to experiment with if you're feeling adventurous. But what would happen to our familiar car interface if tomorrow someone discovered an efficient, cost-effective way to build cars that run on water instead of petrol? The answer: nothing at all. We'd stick to the tried-and-true design we all grew up with; changing the internal mechanism of the car shouldn't greatly affect how we interact with it. This, again, is the idea of encapsulation.
And herein lies the problem; when a tool works as it should, we pay no attention to its mechanism. Most of the complex tools we regularly use today are reliable enough that we comfortably forget how they work, but they are still unreliable enough to fail on rare but inconvenient occasions. Most of us have lost a paper the night before it was due, or had a car break down on the way to the airport. Yet surprisingly few of us take the time to learn how to troubleshoot these situations. In my opinion, if it's worth learning how to properly use a tool, it's worth learning how to troubleshoot it.
What got me thinking along these lines was an incident I recently witnessed while waiting for a bus outside an overpriced mall. A car had been parked on the curb for a few minutes, and evidently quite liked it. On being asked to start, it responded with a sad sputtering noise probably indicative of a dead battery. A middle-aged man got out and hesitantly poked at the engine for a while with a brush. He then began asking passers-by if they knew anything about cars. After several people apologetically admitted that they weren't "car people", somebody finally realized that the problem might lie with battery. He eventually retracted this hypothesis on the grounds that "the engine was making a grinding noise, but if the battery was truly dead, it wouldn't do anything at all".
Now, I'm no car person myself. I don't drive one; I rarely ride one. When cornered into a discussion on, say, the relative merits of the Dodge Challenger and the Chevrolet Camaro (assuming those cars exist), my contribution usually looks something like this: "Well, the one on the right looks a little taller, so I suppose that might be a disadvantage if you had to drive under an extremely low bridge.". And yet I found myself on equal footing with people who spend substantial portions of their lives on the road. Perhaps drivers' license tests should incorporate some basics of car maintenance: changing tires, checking oil – things of that nature.
Considering how this attitude of black-box-ignorance filters down to all spheres of human activity, I suppose it is unreasonable to be surprised that billions of dollars are wasted annually by poorly informed computer users opening BlatantlyObviousComputerVirusBwahaha.bat. I have often wondered whether it would be feasible to require some sort of license before a person is allowed to access the Internet.
(Oh, in case you're wondering, the dead-battery guy eventually drove off perhaps half an hour after the problems began. I didn't get to see the whole thing, but it looked like a mall security guard pulled up and jump-started the battery.)