<< >> Up Title Contents


2.3 Conclusion

My main complaint is that metaphor is a poor metaphor for what needs to be done.

­ Alan Kay (Kay 1990)

Our basic ideas about computation are founded on metaphoric models. The daily activity of programmers involves inventing and dealing with new forms of computational structure, and thus they are engaged in a continual process of inventing and deploying metaphors that make these structures understandable. Such metaphors are not created arbitrarily, however. This point is often lost in battles between constructivists and objectivists. Our ideas about the world are constructed, but they are not constructed just as we please. Scientific metaphors must map everyday concepts onto the actual properties of the natural world and thus the choices of source domains and mappings are highly constrained. There may be more freedom in choosing metaphors to organize computation, but not all metaphorical structuring will prove equally powerful. A good computational metaphor should use only a few real-world concepts for its source domain, and map them onto computational concepts that are powerful. It is hard to capture exactly what determines the power of a metaphorical system. Perhaps an example of a bad metaphor would help: I once used a language that had started as a tool for building computer-assisted instruction "lessons". It had since grown into a general purpose language, but was still structured in terms of lesson units and control flow was organized around the underlying metaphor of question-and-answer drills. All sorts of operations had to be shoehorned into this framework. The question-and-answer metaphor did not translate into powerful and general tools for computation, and as a result the language was quite awkward to use.

The moral is that not all real-world domains are suitable for use as the basis of a general computational model. The ones we have examined in this chapter are dominant because they are powerful and general, and because they have evolved over time as the nature of the computational realm has become better understood. But we should hope that the evolutionary process has not finished and that there is room for the invention of new models for programming that will overcome the limitations and biases of the existing ones.

In a sense, programming is a form of writing. The most basic model of computation, the imperative model, is closely linked to the idea of narrative and drama. Programming is a process of writing scripts for computational actors. Yet the imperative model of programming is theoretically suspect, spawning a search for languages that are more tractable, such as functional programming. Functional programming has not made wide inroads in environments for novices or even for practicing programmers. The reasons for this are many, but surely one is that functional programming discourages thinking of computation in terms of actions and actors. Instead of fighting against the tendency to think in terms of actions and actors, we should work with our natural epistemological tools, and embrace the use of metaphors based on the actors we know, that is to say, humans and other animate entities. The nature of animism and its use in computation is the subject of the next chapter.


<< >> Up Title Contents