For computer science, the meaning of the word abstract is tied most often to the third sense of the term, as outlined above, generality. As with art, there seems to be some slippage, and particularly in theoretical deployments, the term can denote the conceptual. For example, the foundational thought experiment of computer science, the Universal Turing Machine, is an "abstract machine" in that it establishes a theory of computability without ever being realized as a specific built instrument. Most generally and concretely, for programming abstraction means parameterization, "making something a function of something else"[24] But parameterization is rooted within and dependent on a larger abstract process, namely modeling, without which parameterization would be difficult.
Modeling is the process of producing a schematic description of a system, real (and then the basis for a simulation) or imagined. Norbert Wiener's cybernetics is what inaugurated the practice of modeling within computer science, and it lends its concerns and characteristics to the contemporary practice. Cybernetics is the science of the transmission of messages between machines, between humans, and between humans and machines. For Wiener, any distinction among these three is irrelevant; the organic and the machinic are indistinguishable by their operations or their elements.[25] Cybernetics identifies generalizable elements and processes of systems of control and communication, such as input, output and feedback. It schematizes the relationships between them to create models of systems. Cybernetics is an epistemological scheme that defines its world in terms of abstract systems that may or may not have real world referents.
The trajectory of computer science moves in the direction of greater and greater self-consciousness about the practice of modeling to the point where it can deploy a term like "second-order cybernetics" (or "applied epistemology") referring to a modeling practice which takes into account the effects of model making on the system which is being modeled itself. Following from Wiener's lack of distinctions among human and machine elements, model making is not only integral to the design and technical production of computer software systems, but also to the design of their interfaces, which, to a certain extent are composed of complex reflexive systems of modeling. Nicholas Negroponte asserts that, "man-computer interactions should be supported by three levels of model. From the computer's point of view, these include: (1) its model of you, (2) its model of your model of it, and (3) its model of your model of its model of you."[26] The implications for the discipline of Human Computer Interface (HCI) are complex and far reaching.
In the realm of programming practice, this type of systems thinking finds it apotheosis in the technique, which has come to dominate the field, object-oriented programming (OOP). Programming has been remade in the image of cybernetic abstraction. The procedural operations of programming are buried in the object and made submissive to a system of cybernetic relations: inputs, outputs, etc. OOP is abstract in that its structure is governed by (modeled on) the practice of modeling, (itself an abstraction). It is also abstract in the sense that the definition of objects in terms of classes and methods depends on the separation of properties from their object.[27]
Programming then exists under a regime defined by multiple levels of abstraction: object orientation, cybernetic modeling and parameterization. Programming is abstract through and through, being composed of systems of generalizations at each level. However, it is not necessarily abstract in the sense of being divorced from the consideration of particular objects. In most contexts, programming is subservient to an instrumentalism that refers it to real world situations and demands from its systems solutions to business, scientific or military problems. In this way, programming may be considered representational; in the case of its use for simulation, it is perhaps literally so.[28] And yet, simulations, such as Snibbe's and Napier's, may refer only generally to real-world physics, since they borrow the formulations of Newtonian rule merely to abstract them and play them according to the demands of an aesthetic production rather than in the service of modeling an actual (or even potential) physical system. In that case, we might have recourse to a notion of instrumentality; we can test if a program is representational by determining if a use is demanded of it-if it exists for ends, or in terms, other than its own.
[24] Free Online Dictionary of Computing (http://foldoc.org/abstract)
[25] Wiener, Norbert, “Cybernetics in History: The Human Use of Human Beings.” In Randall Packer & Ken Jordan, Eds., Mutlimedia: From Wagner to Virtual Reality, (New York: W.W. Norton & Company, 2001) 48.
[26] Negroponte, Nicholas, “Soft Architecture machines” in Noah Wardrip-Fruin and Nick Montfort, Eds., the New Media Reader (Cambridge: MIT Press, Forthcoming) 355.
[27] It is worth noting that OOP’s prescribed development methods (under the rubric of “best engineering practices”) include the planning (representation, specification, visualization) of projects–software systems, users, business logic etc.–using a modeling language like Unified Modeling Language (UML).
[28] Arguably, all uses of computer systems are simulations in that under OOP they model other systems. If those systems have no real world referent, they may be simulacrums rather than simulations proper, but the distinction may prove meaningless, if, as some have asserted, there is never any referent in the real for simulation.