Computer programmers have always encountered difficulties trying to
solve real world problems with computers. Some famous problems like
the "Travelling Salesman" problem model difficult real world events
and are extremely difficult to solve efficiently. Other problems,
like how to bury as many expenses as possible in the spreadsheet
covering that last business trip or how to get the phone number of
that cute girl that just started in marketing, are very common and
actually not strictly confined to the world of the programmer.

One of the more enduring classical problems in computer science is
the "Give me a rock" problem. Although not as thoroughly discussed
in university courses as some of the other unsolved problems, it is
much more prevalent in industry.

The problem is most clearly described by an example. The following
is an overheard discussion between a user and a programmer:
(Note: Programmer comments in parenthesis are only thoughts and were
not expressed vocally).

u:
Give me a rock.

p:
What kind of rock?

u:
You know, a rock.

p:
(This is going to take quite some time). OK, how about this one?

u:
No, not that one.

p:
Well, what's wrong with it?

u:
It's not the one I wanted. Give me a rock.

p:
How about this one? Is this the one you want?

u:
No, that's not it either. I couldn't possibly use that one. It's
much too small for one thing.

p:
(Now we're getting somewhere.) How big is this rock supposed to be?

u:
Bigger than that one anyway. Give me a rock.

p:
(Alright, I didn't have anything to do this weekend anyway). OK,
here's a bigger rock.

u:
Boy, are you ever dense. You don't know the first thing about
rocks, do you? I couldn't possibly carry that by myself, it won't
fit in my wagon, and, worst of all, it's red. We've only ever
used big, blue rocks before.

p:
(...and I went to college for this). OK, in order to carry it by
yourself I'll get a rock that weighs less than ten pounds, will
fit in your wagon, and is any other color than red. Is that what
you want?

u:
Yes, ten pounds sounds about right. Give me a rock.

p:
How about this one?

u:
Oooh, that's a nice one. It will never do. Take it back.

p:
What's wrong with it?

u:
For one thing it's much too wobbly to stand on. Besides, I saw
somebody with a nice red rock over there in that dump truck. Why
can't you get me a rock more like that one. I bet that one isn't
the least bit wobbly.

p:
(You don't have the faintest idea what you want this rock for, do
you?) You'll need a dump truck for a rock like that.

u:
I don't have money in the budget for a dump truck. I definitely
need a rock more like that one. And get one that fits between my
other rocks here. Now that I think about it, it should be at
least two feet on a side so it doesn't tip over. And it has to be
portable so it should weigh about three pounds or less. Give me a
rock.

p:
Where am I going to find a rock like that? Look, your rock can't
possibly have all of those features at the same time. I'll do the
best I can to find a rock like that but this may take some time.

u:
Not good enough. I need a rock now so I can improve my
productivity. Give me a rock.

... and so on. Note that the programmer had lost a notable amount of
hair while this discussion was occurring. This presentation of this
famous and unsolved problem is just an example of the perils facing
programmers today.

Greg Borek is a C programmer with a "Highway Helper" (okay, "Beltway Bandit"
- but don't tell his boss we told you.) in Falls Church, VA. He has previously
been mistaken for a vampire. Greg can be reached via e-mail at: