The objects of primary concern to computer scientists are processes, programs, and algorithms. Many non-computer scientists are not clear about the differences between these objects and the precise relationships between these objects are not clear to anyone, computer scientist or not. Terms like abstraction (Colburn & Shute, 2007), instantiation (Abrial & Hallerstede, 2007), and implementation
... [Show full abstract] (Rapaport, 2005) are vaguely used to describe the relations among these objects. The nature of these relations, once put into proper context, has serious implications to the study of artificial intelligence, intellectual property, and computer ethics. In this paper, designed to be used in the context of an introduction to the philosophy of computing, a basic ontology is suggested and the importance of the ontology is described. It is then proposed that ontologies which treat implementation as a primitive are not sufficient and that implementation is better understood as a two-step process of abstraction and instantiation.