The body of this thesis is in four chapters. The first two are primarily conceptual and analytical, while the last two are more technical and describe implemented software.
Chapter 3 continues the task of the previous chapter by exploring a particular type of metaphor that employs some form of anthropomorphism or animism. Animacy is seen to be, in itself, a basic category for dealing with the world, with roots deep in innate perceptual processes. Three relevant characteristics of the animate realm are selected for attention, because of their centrality to the concept and because of their relevance to computation: purposefulness, reactivity, and autonomy in the sense of being able to initiate action. Animism is seen to be central to understanding action, and thus also central to understanding computational activity.
The chapter examines the use of animism in programming languages, as well as the more explicitly anthropomorphic constructs found in interface agents and artificial intelligence. We find that most programming languages involve implicit animate metaphors, but an animacy of a particularly limited sort that derives from the original conception of the computer as a device for following instructions.
At this point, it is possible to more precisely define agent-based programming as an attempt to construct a new paradigm for programming that makes computational animism explicit and attempts to extend it beyond the instruction-following metaphor to include the central properties of animism revealed by our analysis, such as autonomy and goal-directedness. Various methods for realizing an animism with these properties in computational forms are explored. Some previous attempts to construct programming systems that operate in this style are examined and critiqued.
Chapter 5 presents a series of agent-based programming systems implemented using LiveWorld. The first two, Simple Agents and Goal Agents, are computationally fairly trivial but serve to illustrate some of the key concepts underlying agent-based programming. These include the idea of agents as separate objects that can be independently manipulated and integrated into a computational actor, the need to handle concurrency and conflict, the idea of using goals as a method to organize agent activity, and the use of anthropomorphic icons to convey agent state and activity to the user. The final agent system, Dynamic Agents, illustrates how these ideas can function as part of a more powerful and general programming system. A series of examples shows how the agent systems can implement systems for the selected problem domains.