What is Software?
As reflective software practitioners we may wonder what software is made of. Bridge builders and steam engine designers pay careful attention to the composition of steel and the structural properties derived from that composition. Specific material characteristics generally impose important constraints on the design of physical artifacts. If software consists of many layers of signs from elemental logic functions buried deep in chips up to high-level software components corresponding to functional requirements and if the electro-magnetic and silicon substrate are irrelevantly distant from the nature of software, then where do the constraints come in? If we do not have to move atoms around but merely manipulate bits (signs), then whence the resistance we meet in trying to implement our goals?
Signs of the Limits of Semiotics
Some years ago I asked Frieder Nake if software art might point toward the nature of software and at the resistance it offers us like art in other media brings out their natures (see http://GerryStahl.net/HomePage/Publications/Misc/software_art.html). This summer Frieder put forth the claim that semiotics, based on the writings of Peirce, could explain the nature of software as a system of signs if we understood what a sign is. A group of us met four times to investigate this suggestion. Frieder further enticed us with the claim that software is the ultimate postmodern medium, presumably in the sense that it constitutes a reality in which there is nothing but signs and signs of signs.
Four meetings and a couple brief excerpts from Peirces obscure texts were by no means sufficient to disentangle our preconceptions, Peirces shifting ideas, subsequent developments in semiotics, and Frieders own complex interpretations. However, I came away with the impression from all this that statements of semiotics (e.g., Peirces and Frieders) were open to two opposed interpretations: (a) a purely symbolic interpretation in terms of nothing by signs and (b) an interpretation that rooted signs ultimately in something non-symbolic. I think there is a tendency toward reading (a) of semiotics. As opposed to that, I would claim that semiotics needs to recognize that it is limited, and that signs are ultimately founded in non-symbolic material human reality. Only when we recognize that signs cannot be understood solely in terms of other signs can we understand the nature of software as a resistive medium. (This claim is closely related to Searles that a room full of signs and algorithms cannot understand Chinese, or the critique of LSA as a cognitive theory that statistical relationships among signs cannot fully capture meaning any more than an uninterpreted dictionary see http://GerryStahl.net/HomePage/Publications/Misc/Chinese%20Room.html.)
I will start by looking at two statements by Peirce. Then I will briefly summarize a couple of philosophical distinctions in order to introduce some terminology for defining the non-symbolic context of signs. Finally, I will apply this terminology to suggest a rough description of the nature of software.
The Ambiguity of Peirces Signs
I will illustrate the ambiguity of Peirces statements by arguing against Frieders interpretations of two points. (To argue against the limitations or contradictions of a dialectical thinker is the highest form of respect, praise and thanks. My arguments were already implicit in Frieders presentation.) Peirce defines a sign as having three elements: a symbolic representation (the representamen), the object represented, and the interpretant perspective. To this definition Frieder remarks, "Ludwig Wittgenstein, in his later writings, defined the meaning of a word to be its use. This amounts to the same as Peirces concept of sign." To me the opposite seems true of Peirces definition. Peirce seems to be very much in the tradition of the early Wittgenstein, who tried to reduce language to symbolic representations of real world objects. With the notion of meaning as use the later Wittgenstein rejected the idea that word signs represented objects and moved to a functional view of language: people use words to accomplish social and communicative goals. Language is no longer a semiotic system of signs representing objects, but a network of social games embedded in cultural forms of life.
The second point that Frieder makes is that the interpretant, one of the elements of the sign, is itself a sign: "It is this recursiveness of the concept that makes it irreducible and maximal." For Frieder, apparently, the signs definition in terms of an infinite regress of signs links semiotics to software and postmodernity. But Peirce noted that the recursion of symbolic interpretants bottoms out at some point in "habits" of the human interpreter. With habits, one leaves the explicit realm of symbolic expression and reaches its roots in tacit knowledge.
According to Heidegger, all explicit knowledge derives its meaningfulness from a network of significance that makes up the interpretive (hermeneutic) situation. This significance is based on tacit knowledge that comes from our lived experience as historical embodied beings living in the physical and social world (see also Merleau-Ponty, who explicated this view). So semiotics deals with a level of knowledge that is not irreducible, but is based on a non-symbolic level of experiential meaning.
Marx provides a more specific analysis of human existence in the world with his concept of labor as human activity transforming nature. Two of his distinctions are useful for analyzing the sign nature of software. Marx distinguishes intellectual labor from manual labor. We can take this as the separation of symbolic from physical processes. Marx shows how this increasing separation is an historical development arising from capital accumulation the symbolic distinction is produced by material social reality. Managerial functions are separated from material production, assigned to different people, departments, or even countries. This raises the possibility that the "information society" may not represent a post-capitalist form of production, but merely the further separation of intellectual labor in the first world from manual labor in the third world.
Marxs second distinction is between live labor and dead labor. Dead labor is the productive capability of artifacts in which past labor is now congealed. Machines are Marxs prime example of dead labor. Machines have a productive capability based on two conditions: (a) they encapsulate past human labor and (b) they magnify the effects of current live labor. Capital is dead labor. As the theoretician of the industrial age, Marx focused on dead manual labor as the basis for machinery. Today we might extend this approach to a concept of dead intellectual labor as the basis for the meaningfulness of symbolic artifacts: signs as dead intellectual labor.
An analysis of signs as dead symbolic activity could account for the recursive nature of signs as well as for the bottoming out of this recursion in live human activity in the physical, social world. It could also tie communicative signs to social activity and culture, since culture is the paradigmatic agglomeration of dead intellectual labor at a social level.
Software as Machinery
Let us apply these distinctions to software. A program represents the intellectual labor that went in to designing it (to accomplish some human goal), writing it (to define an algorithm that is humanly meaningful), and debugging it (to ensure that it produces humanly useful output). Like a piece of machinery enclosed in a black box, a software artifact in an executable file may persist long after the labor that went into it is forgotten and the artifact may reveal little about the intentions of that past labor. However, when the artifact is put to use by new live labor it performs in ways determined by its congealed dead labor.
Consider a piece of software that you are creating with your live intellectual labor right now. You are making use of software libraries, compilers, assemblers, operating systems, utilities, etc. that are the result of countless hours of intellectual labor virtually the result of the entire history of software. You also make use of concepts like variable, recursion, class that incorporate models of thought whose cultural history can scarcely be comprehended. To all this you add your meager contribution, expecting that since you are just manipulating bits arbitrary signs you should encounter no inertial resistance.
If one considers the amount of dead intellectual labor incorporated in a software artifact (and in the design of its hardware substrate), it is incredible that it works and allows the live labor of programmers or end-users to accomplish their own specific human goals. Clearly, this enormous symbolic machine only works because (a) a considerable amount of the labor that went into it was devoted to making it simplified, standardized, and reliable and (b) much social effort went into developing compatible practices of live software labor through socialization and training. Rather than adopting a postmodern, allegedly post-capitalist ideology in which being digital is divorced from pushing atoms, we might view Software as the biggest machine yet produced for increasing intellectual productivity and maximizing capital accumulation. Is it a coincidence that todays wealthiest robber baron sells bits?
Gerry Stahl, August 9, 1998
Go to top of this page
Return to Gerry Stahl's Home Page
Send email to Gerry.Stahl@drexel.edu
This page last modified on January 05, 2004