- Why Programming is a Good Medium for Expressing Poorly Understood and Sloppily Formulated Ideas, by Marvin Minsky (1967)
LATITUDE OF EXPRESSION AND SPECIFICITY OF IDEAS
Finally we come to the question of what to do when we want to write a program but our idea of what is to be done, or how to do it, is incompletely specified. The non sequitur that put everyone off about this problem is very simple:
Major Premise: If I write a program it will do something particular, for every program does something definite.
Minor Premise: My idea is vague. I don’t have any particular result in mind.
Conclusion: Ergo, the program won’t do what I want.
So, everyone thinks, programs aren’t expressive of vague ideas.
There are really two fallacies. First, it isn’t enough to say that one doesn’t have a particular result in mind. Instead, one has an (ill-defined) range of acceptable performances, and would be delighted if the machine’s performance lies in the range. The wider the range, then, the wider is one’s latitude in specifying the program. This isn’t necessarily nullified, even when one writes down particular words or instructions, for one is still free to regard that program as an instance. In this sense, one could consider a particular written-down story as an instance of the concept that still may remain indefinite in the author’s mind.
This may sound like an evasion, and in part it is. The second fallacy turns around the assertion that I have to write down a particular process. In each domain of uncertainty 1 am at liberty to specify (instead of particular procedures) procedure-generators, selection rules, courts of advice concerning choices, etc. So the behavior can have wide ranges-it need never twice follow the same lines, it can be made to cover roughly the same latitude of tolerance that lies in the author’s mind.
At this point there might be a final objection: does it lie exactly over this range? Remember, I’m not saying that programming is an easy way to express poorly defined ideas! To take advantage of the unsurpassed flexibility of this medium requires tremendous skill-technical, intellectual, and esthetic. To constrain the behavior of a program precisely to a range may be very hard, just as a writer will need some skill to express just a certain degree of ambiguity. A computer is like a violin. You can imagine a novice trying first a phonograph and then a violin. The latter, he says, sounds terrible. That is the argument we have heard from our humanists and most of our computer scientists. Computer programs are good, they say, for particular purposes, but they aren’t flexible. Neither is a violin, or a typewriter, until you learn how to use it.