![](https://csdnimg.cn/release/download_crawler_static/9959855/bg4.jpg)
3), waiting for a head gasket to be shipped in.
The second story (perhaps apocryphal 杜 撰 ) is supposed to have happened during the
infancy of electric power generation. General Electric Co. was having trouble with one of
its huge electric power generators and did not know what to do. On the front of the
generator were lots of dials containing lots of information, and lots of screws that could
be rotated clockwise or counterclockwise as the operator wished. Something on the other
side of the wall of dials and screws was malfunctioning and no one knew what to do. So,
as the story goes, they called in one of the early giants in the electric power industry. He
looked at the dials and listened to the noises for a minute, then took a small pocket
screwdriver out of his geek pack and rotated one screw 35 degrees counterclockwise. The
problem immediately went away. He submitted a bill for $1,000 (a lot of money in those
days) without any elaboration. The controller found the bill for two minutes' work a little
unsettling, and asked for further clarification. Back came the new bill:
Turning a screw 35 degrees counterclockwise: $ 0.75
Knowing which screw to turn and by how much: 999.25
In both stories the message is the same. It is more efficient to think of entities as
abstractions. One does not want to get bogged down in details unnecessarily. And as long
as nothing untoward happens, we are OK. If I had never tried to make the trip to Arizona,
the abstraction "cooling system" would have been sufficient. If the electric power
generator never malfunctioned, there would have been no need for the power engineering
guru's deeper understanding.
When one designs a logic circuit out of gates, it is much more efficient to not have to
think about the internals of each gate. To do so would slow down the process of designing
the logic circuit. One wants to think of the gate as a component. But if there is a problem
with getting the logic circuit to work, it is often helpful to look at the internal structure of
the gate and see if something about its functioning is causing the problem.
When one designs a sophisticated computer application program, whether it be a new
spreadsheet program, word processing system, or computer game, one wants to think of
each of the components one is using as an abstraction. If one spent time thinking about
the details of a component when it is not necessary, the distraction could easily prevent
the total job from ever getting finished. But when there is a problem putting the
components together, it is often useful to examine carefully the details of each component
in order to uncover the problem.
The ability to abstract is a most important skill. In our view, one should try to keep
the level of abstraction as high as possible, consistent with getting everything to work
effectively. Our approach in this book is to continually raise the level of abstraction. We
describe logic gates in terms of transistors. Once we understand the abstraction of gates,
we no longer think in terms of transistors. Then we build larger structures out of gates.
Once we understand these larger abstractions, we no longer think in terms of gates.
The Bottom Line
Abstractions allow us to be much more efficient in dealing with all kinds of situations. It is
also true that one can be effective without understanding what is below the abstraction as long
as everything behaves nicely. So, one should not pooh-pooh the notion of abstraction. On the
contrary, one should celebrate it since it allows us to be more efficient.