
I used to think there was no room for mystery in the world of computers. I didn't think
there was any use for fudge factors or rules of thumb or hunches in the clean, exact,
hermetically sealed bubble of logic we all spend so much time diddling and poking. That
stuff belongs to "real world" engineering, not software engineering, right? Software is
always bounded and orderly, always understood completely from top to bottom, with no
dangling ends, no frayed edges, and no baling wire and duct tape holding things together.
There's never a need for vague, hand-waving explanations of how it all works, because
we know how it works.
That's what I used to think. I'm not so sure anymore.
Ultimately, of course, the operation of computers is deterministic and absolutely
predictable. There's guaranteed to be a complete explanation for any event on the
computer; the search for an answer will always find one. It's like playing Go Fish with
a deck of cards that contains only threes -- "Got any threes?" "Yep." "Got any threes?"
"Yep." "Got any threes?" "Yep." The answer itself, of course, may be convoluted and
difficult, and is often way too much trouble to actually track down ("Have you tried
rebooting?"), but it's always there. The world inside computers has a definite,
impermeable bottom, like a swimming pool.
The real world, on the other hand, is more like being out in the middle of the ocean: the
bottom is nowhere in sight, and in fact is so far away that it may as well not exist at
all. Trying to completely explain things in the real world is generally an exercise in
futility, though one that humans seem to have a capacious appetite for (that's what
science is all about, after all). The real world is so vast and complex that our
explanations are never really complete. The answers always lead to more questions,
and the edges of our knowledge remain frayed and ragged and crumbling, even though
the center may have a seemingly solid, well supported integrity.
The thing that got me thinking about all this is boomerangs. I've been learning to throw
boomerangs lately, and it's extremely satisfying -- and somehow endlessly novel -- to
throw something away from yourself as hard as you can, and have it return several
seconds later, hovering gently down into your waiting hands like a bird coming home to
roost. (Such a perfect flight, of course, is a rare thing for a novice like me. More
often, if the boomerang comes anywhere near me, it's slicing past at a frightening rate
of speed while I cringe, covering my head.) While I've been learning to throw
boomerangs, I've also been trying to watch myself learn to throw boomerangs -- sort
of meta-boomeranging -- and I noticed that a complete explanation of what was
happening was not only absent, but completely unnecessary: I don't need to know how
boomerangs work to learn to throw them well.
Boomerang throwing is one of those real-world activities -- there are many of them
-- that are governed by rules of thumb, by approximation and estimation, and by
"feel." There are lots of variables involved in producing a good boomerang flight, and
they're all sort of woven together, interconnected and interdependent. The direction of
the throw, the angle of the boomerang as it leaves your hand, the forward power of the
throw, and the amount of spin all contribute to the flight characteristics, but the way
they combine and interact is complex and nonobvious. How's a poor, bewildered
boomerang neophyte to make any sense of it all?
Well, the only way to learn to throw boomerangs is to get yourself a decent boomerang
(very important!), read a little about it or get a lesson from someone, and then just
get out there and start throwing. You need to experience it; you need to feel the smooth,
flat weight of the thing, notice the way it slices the wind as it leaves your hand, and
watch as it spins and swoops. Every throw you make adds to a growing store of
knowledge about boomerang behavior. Slowly, you begin to sense the structure of the
rules that govern the flight of the boomerang, to get a feel for it, to gain some control.
But no matter how long you work at it, there's always more you can learn about
boomerangs. Boomerang throwing, like most things in the real world, has no bottom.
But even though things in the real world are webby, tangled, and complex, with no real
bottom and no real center, and even though complete understanding is out of our reach,
that doesn't stop us from getting things done. Even though we may not understand
exactly what's going on when we throw a boomerang, we can learn to throw them
anyway, and can actually learn to throw them with incredible skill. Scientists don't
have a complete understanding of fluid mechanics, but we can still design hydraulic
lifts that lift, toilets that flush, and airplanes that fly.
Though it seemed profound when I first thought of it that way, it really isn't anything
remarkable at all. It's the stuff our everyday sensory world is made of. It's our
standard, animal mode of operation. We depend heavily on trial and error, on finding
and keeping strategies that work. We invent myths and superstitions to explain things
we don't understand, we guess, we fake it, we operate by feel. And it works just fine.
But we don't need that sort of thing in the clean, deterministic world of computers,
right? If we know the answer is within our reach, then why gloss over it? There's one
very good reason: it's gotten to the point where it's often really hard to reach the
answer. Computers have become so complex that finding the real answer is often a
Herculean feat requiring great effort and stamina. The things that we're "growing" in
the machine are getting very deep and webby and complex, just like things in the real
world. That nice smooth bottom we all know and love is getting pretty remote and hard
to see, and in fact trying to keep it in sight often holds us back.
The truth is, we need fakery, or myth, or something similar, to avoid being hopelessly
mired in complexity, and to let us feel cozy even in the face of something too deep to
comfortably understand. The idea that an icon in the Finder, a document window in an
application, and a file on the hard disk are all "the same thing" is a fiction, an illusion
created from smoke and mirrors, and one that users don't even think about anymore
(unless, of course, an application screws up the illusion; see Mark Linton's article in
this issue for some code to help you avoid such a faux pas). But it's precisely that kind
of myth and abstraction that lets people ignore all the underlying complexity and just
go about their everyday business. Without that kind of trickery most people would be
lost.
Humans have a deep need for some sort of explanation, and we'll often ignore aspects of
a situation, or even make stuff up out of thin air, if it helps us to find an "answer."
Remember the frictionless inclined planes and perfect vacuums of college physics?
Without that kind of glossing over of details, we'd have been helpless. (A college
housemate of mine and I used to joke about running a college physics stockroom: boxes
of frictionless, massless pulleys on the shelves; gallon jugs of zero-viscosity liquid at
our feet; coils of infinite and semi-infinite wires hanging neatly on the pegboard wall.
Those wires have no thickness or mass, thank goodness, or the storage requirements
would be prohibitive.) This need for explanation is what has led us to science, and to
religion, and to superstition. These are not the same thing, of course, but they can all
serve the same purpose: a soothing, protective balm on the raw edges of our incomplete
knowledge. They give us a ground to stand on, a rail to hold on to, as we totter along in
the darkness, going who knows where, hoping the batteries will hold out long enough to
get an answer.
Now that I think about it, I'm happiest with a generous helping of myth and fiction
stirred into my computing. It can help make the computer -- which, let's face it, is
essentially a gritty, sharp-edged, and hostile machine -- feel more rounded and
friendly. It can provide a useful disguise, like a plastic nose and glasses on something
seething and alien, making it recognizable, familiar, even comforting and amusing. If
it's done well, it can even let me learn to use a computer in much the same way I learn
to throw a boomerang: by picking it up and trying it, by mucking around and getting a
feel for it, by discovery.
Maybe best of all, it lets computers keep a little of their mystery. The mystery and
magic of the Macintosh are why many of us are programmers, after all. Mysterious
things, things that don't have clean and obvious boundaries, are inevitably more
interesting and more fun. There's no denying that computers have a dull, featureless,
dreary bottom. But in the other direction there seems to be no boundary; the top, if
there is one, is as far away as the sky. So yes, I think there's plenty of room for
mystery in the world of computing. Plenty of room indeed.
RECOMMENDED READING
DAVE JOHNSON has an ever-lengthening list of life goals, things that he'd like to
accomplish or experience before leaving this mortal coil. Some recent additions
include making marshmallows from scratch, milking a cow, and hugging a full-grown
bear. (Is bear breath better than dog breath? There's only one way to find out!) If you
have a cow or bear Dave could visit, please let him know.*
Thanks to Lorraine Anderson, Jeff Barbose, Brian Hamlin, Mark "The Red" Harlan,
Bo3b Johnson, Lisa Jongewaard, and Ned van Alstyne for their always enlightening
review comments.*
Dave welcomes feedback on his musings. He can be reached at JOHNSON.DK on
AppleLink, dkj@apple.com on the Internet, or 75300,715 on CompuServe.*