September 95 - The Veteran Neophyte: A Feel for the Thing
The Veteran Neophyte: A Feel for the Thing
Dave Johnson
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.
- Many Happy Returns: The Art and Sport of Boomeranging by Benjamin Ruhe
(Viking, 1977).
- How to Hide Almost Anything by David Krotz (William Morrow and Company,
1975).
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.*