Computer science typically proceeds by first doing something, and then thinking carefully about it: Engineering usually precedes theory. Some examples:
- The first programmable device in modern times was the Jacquard Loom, a textile loom that could weave different patterns depending on the instruction cards fed into it. This machine dates from the first decade of the 19th century, but we did not have a formal, mathematical theory of programming until the 1960s.
- Charles Babbage designed various machines to undertake automated calculations in the first half of the 19th century, but we did not have a mathematical theory of computation until Alan Turing’s film-projector model a century later.
- We’ve had a fully-functioning, scalable, global network enabling multiple, asynchronous, parallel, sequential and interleaved interactions since Arpanet four decades ago, but we still lack a fully-developed mathematical theory of interaction. In particular, Turing’s film projectors seem inadequate to model interactive computational processes, such as those where new inputs arrive or partial outputs are delivered before processing is complete, or those processes which are infinitely divisible and decentralizable, or nearly so.
- The first mathematical theory of communications (due to Claude Shannon) dates only from the 1940s, and that theory explicitly ignores the meaning of messages. In the half-century since, computer scientists have used speech act theory from the philosophy of language to develop semantic theories of interactive communication. Arguably, however, we still lack a good formal, semantically-rich account of dialogs and utterances about actions. Yet, smoke signals were used for communications in ancient China, in ancient Greece, and in medieval-era southern Africa.
An important consequence of this feature of the discipline is that theory and practice are strongly coupled and symbiotic. We need practice to test and validate our theories, of course. But our theories are not (in general) theories of something found in Nature, but theories of practice and of the objects and processes created by practice. Favouring theory over practice risks creating a sterile, infeasible discipline out of touch with reality – a glass bead game such as string theory or pre-Crash mathematical economics. Favouring practice over theory risks losing the benefits of intelligent thought and modeling about practice, and thus inhibiting our understanding about limits to practice. Neither can exist very long or effectively without the other.