Jay David Bolter (1984), Turing's Man: Western Culture in the Computer Age, Chapel Hill: University of North Carolina Press. Luciano Floridi (1999) Philosophy and Computing: an introduction, London: Routledge. In the development of the computer, theory preceded practice. J. David Bolter cites Alan Turing's paper 'On Computable Numbers' of 1936 in which he sets out the possibilities of logic machines - what became known as the Universal Turing machine - indeed long before they were built (1984: 12). Turing manages to describe the processing of information that any digital computer performs: 'to replace discrete symbols one at a time according to a finite set of rules' (Bolter, 1984: 47). More well known is Turing's paper of 1950 'Computing Machinery and Intelligence' in which he makes the claim that computers will be capable of imitating human intelligence, or more precisely the human capacity for rational thinking - what has become known as 'artificial intelligence'. Artificial intelligence is what Marvin Minsky has described as 'the science of making machine do things that would require intelligence if done by men (sic)' (from Semantic Information Processing, quoted in Bolter: 1984: 193). Interestingly, the definition not just through the analogy of humans and computers, or imitation, but through their differences. If technology is broadly defined as the controlled application of power, ancient forms such as craft tools connect closely with human or animal muscle power. In Ancient Greece, such practical skills were combined with poetic insight. Craft skills were taken as analogous to other skills of planning and execution: 'The Platonic world of ideas was really a series of perfect patterns from which the imperfect objects of the material world were derived' articulating the compromise between the 'ideal' and the possible (Bolter, 1984: 22). Bolter charts the connection of ideas about the world and the development of technology. It is well established that the middle ages developed a dynamic but clockwork view of the world that underpinned philosophical and theological thinking at that time. In considering technologies, it is important to recognise this long history of mechanisms that relate to computation in the broadest sense. A computer is above all a computational system. Computation defined simply is a logical or physical process of generation, turning inputs into outputs. Additionally, Luciano Floridi would add that these state transitions (from initial state to final state) are based upon a number of variable rules making the intuitive definition ultimately too simple (1999: 4). A more detailed understanding requires a longer history of mathematical and computational machines that necessarily link to the development of logical thinking: Pascal's adding machine of 1642; Leibniz's multiplication machine of 1671; Babbage's analytical machine of 1835, to name a few. It also requires an understanding of the potential for computing to extend beyond rational thinking, as a way of recreating or even generating new realities (Floridi, 1999: 8). The von Neumann machine basically adapted mechanical ideas from Charles Babbage of storage and processing to the electronic age - combining the program (the instructions) and the data into the same code. For Bolter, it is the ultimate assembly line manipulating parcels of information, and is an archetype for an industry that requires specialised collective labour and knowledge (1984: 34). The computer has thus become an analogy for contemporary thinking, and arguably is a 'thinking system' in itself. Delving into this history, Bolter describes the innovation of the von Neumann computer was in considering the two principles of operations simultaneously: the rules of the operation and the data upon which this program operates. At this time, the data was put onto punch cards but the rules needed to be expressed in a way that was not simply the structure of the machine itself or its wiring. Von Neumann stored the rules and the data as strings of binary digits, all stored in the computer's memory and differentiated by the central processing unit. Within electronics, this thinking has encouraged the separation of engineers from programmers (until a recent merger, for instance in the University of Plymouth, the Schools of Communications and Electronic Engineering and the School of Computing) - more commonly expressed as an emphasis on hardware or software. The programmers put the pre-existing hardware to work (or life, according to Bolter, 1984: 52). One is hard and fixed, the other soft and mutable according to this logic. One is worked upon, and one performs the work. On a more precise level, the computer works through binary arithmetic - both representing and manipulating numbers in base 2, a system that only uses the digits 0 and 1. Computers are binary simply because the flows that passed through the relays and switches operated in binary mode too - on or off, 1 or 0 accordingly. Even in mathematics, this is an issue of representation as the symbols are not given or fixed - just pervasive. Interestingly, in terms of numerical calculations, the computer is surprisingly prone to errors, and certain calculations simply cannot be performed by strings of binary digits ('pi' is a famous example). It was Ada Lovelace who envisaged Babbage's Analytical Engine, as not merely calculating numbers but arranging and combining letters and other symbolic systems - not as a calculator but as a logic machine. In turn, this informs von Neumann's approach to expressing different codes through the same binary representations or strings of bits - making 1 and 0 potentially yes or no, true or false, and so on. Bolter explains that this binary 'truth functions' is discrete, unambiguous, just computes as true or false. Furthermore, the logic extends using more complex formations such as 'or' - 'and' - 'not', as well as rules about contradiction, consistency and implication (1984: 69). Through these formal systems, mathematics and philosophy were combined under a symbolic logic. The impact of this logic allows for ideas of artificial intelligence, in which machine can think and reason, bringing order to the world. Whereas, 'outside the computer, there is only chaos, dust, and various contaminants from which this fragile universe of order and logic must be guarded if it is to continue to function' (Bolter, 1984: 74). In the computer, all information is treated using this logic, coded into binary representation in order to be manipulated. Computers manipulate arbitrary symbols following conventions and rules - at the level of syntax rather than semantics if you like. It is at the level of representation that ambiguity, imagination and reality enter the frame. When computers are networked, the logic also gets leaky. Logic, space and time are of central consideration in computation. Programmers arrange the data in space as a structure, and the program then acts upon this and returns a new data structure. In this sense, programmers express information architectures and work in spatial terms - parallel computing would be a good example. Bolter explains that programming languages provide structures in a data types called 'arrays', and more complex arrangements such as 'trees' (1984: 86). Programming languages can clearly be seen for their spatial qualities, their grammar and syntax but also their poetic arrangements in electronic space. Like poetry and electronic writing, a computer's operations are decidedly time-based as well as spatial; processing might be fast but nothing operates instantaneously on a computer. When instructions are to be repeated, this is called a 'loop', set to repeat until a terminating condition is met, unless an infinite loop is invoked. As Bolter points out: 'The time limits, which the computer and its programmer confront, are of both a theoretical and a practical nature. The ultimate limit comes from the nature of the computer itself' which is finite (1984: 112). On the other hand, infinite loops (that in theory might run infinitely) threaten the logical structure built into the machine. In this connection, Bolter charts this reception of progress over the ages: in ancient time where there is little evidence of a belief in indefinite progress in contrast to Enlightenment thinking where unlimited human progress became dominant influenced by the operations of the clock (1984: 117-9). He contends that computers suggest a different view where 'time is finite and its progress is cyclic. Progress through repetition has in fact become a trademark of the whole industrial era' (1984: 120), but in this case not produced mass produced goods but units of information and ideas - immaterial production in other words. The loop characterises our contemporary view of progress through the analogy of recycling (Bolter wrongly characterises Capitalism and Marxism together in their faith in the direction of progress, 1984: 123 - their views of history are decidedly different). On a practical level, computers use languages to represent the logical structure of the problems to be solved as code (Bolter, 1984: 124). An obvious distinction needs to be emphasises in that 'artificial' languages differ from 'natural' languages but clearly there is nothing natural about either language, they are both artificial. Although programming languages are not spoken as such, the analogies are more complex than simply saying natural languages evolved differently - from speech to written forms. However, natural languages clearly are not as fixed and evolve constantly through usage. (see my other notes on language and code) However, there are similarities too of course. Certainly some programming languages can be grouped and influence each other. Aesthetic concerns, issues of efficiency, accessibility and style are common to both. Importantly, a program is written for two very different readers: the computer that executes it and other programmers who may like to understand it and revise it (Bolter, 1984: 127). As a result of some of these factors, there are hierarchies of programming languages: from 'machine language' of 1s and 0s, to 'assembly languages' that translates the machine language with another program (an assembler), to 'higher level languages' that are more complex translation programs (called compilers) (Bolter, 1984: 128). Computer codes follow a hierarchy based on their relationship to machine instructions and binary logic but this is not a value judgement as such. 'High' and 'low' here relates to efficiency and complexity in an interdependent relationship. Many programmers would deny the ambiguity of expression in their work - it either works or doesn't in logical terms - but clearly there are poetic and expressive elements in code. The logician also approaches natural languages in terms of its linguistic structure over semantic contents. Chomsky's Syntactic Structures (1957) is particularly influential here in proposing generative or transformational grammars. In this way, language was treated 'as an algebraic structure rather than as a lexicon of individual words' (Bolter, 1984: 147). A word is only of interest in as much as it is part of an overall rule-based structure that generates a sentence. It was Jerry Fodor, following Chomsky, who suggested that language is an internal code wired into the human brain - somewhat similar to machine code (Bolter, 1984: 150). Presumably natural languages work like translation programs at a higher level but still only translate the machine code. Computer memory is also arranged hierarchically. At the top of the hierarchy are data-base systems for storage and retrieval large amounts of information. A data-base consists of any kind of discrete information put into 'machine-readable' form. Computer storage is exceedingly reliable, and organised in associative patterns making retrieval and searching efficient. In solving a given problem, the central processor takes symbols from memory, combines or compares them with other symbols and then restores them to memory following rules of logic. The computer is working with form rather than content. The programmer is clearly a crucial part of the overall ecology of the computer machine. Creativity in this connection is a contentious issue: is this really expressive or merely a demonstration of skill - is it an art or a craft, or both? Programmers tend to work collaboratively (and yet simultaneously in isolation working on a terminal at the end of an internet connection) and express technical and intellectual skills - good technique in other words (in the sense that Benjamin describes elsewhere). The programmer puts logic to work, mediating between the problem to be solved and the logic of the computer - mediating or translating between content and form. The art of programming might be seen as the translation between content and form, between a problem expressed in human terms to one expressed in a way the computer can process, between ambiguous and complex expression and formal logic - between loose and strict thinking perhaps. At one extreme is the 'hacker', a compulsive programmer who is a caricature of a 'programming virtue, that of making one's program clean and coherent' (optimum performance) - Bolter calls this the 'twin qualities of programming, correspondence and internal coherence' (Bolter, 1984: 174). When programming is considered in terms of art of course, this does not hold. Creative work in translation offers other possibilities (in terms of language and meaning production), and ways of making comment upon the logic and system employed. Bolter says that 'the programmer (and even the designer of computers) is farther removed from the materials than anyone before in the history of technology' (1984: 185). This is patently not true if code is material. In fact, Florian Cramer would maintain that there is a special closeness between material and tool (see notes on code elsewhere). He redeems himself, later, when in claims that 'the computer is in some ways a grand machine in the Western mechanical-dynamic tradition and in other ways a tool-in-hand from the ancient craft tradition' (1984: 232; Bolter, despite recognising both tendencies, would like to promote the computer as tool as he thinks this promotes more humane intentions). Here there is an emphasis on the less or more human control involved. The computer's functionality and its use is therefore paramount - more a semi-autonomous tool of intention (or something like that). Quantum dialectics (add to digital dialectics): A computer is a physical material thing, hardware constrained by the laws of physics. Adding a layer of complexity to this, 'quantum computing' attempts to step outside the physical constraints of standard computers by taking an external perspective to provide insights into possible directions that are non-deterministic and transformative and of course involve quantum states. In this way, new ways of codifying and processing data might be envisaged. If algorithms that follow the laws of quantum physics are implemented, the principles are made manifest in terms of physical information at least. The difference lies in that standard computing that follows Newtonian physics and only allows a bit to be any one determined state at a time - on or off. Whereas a quantum computer 'exploits the possibility of quantum states of atomic particles to store digital registers in a definable but still undetermined quantum superposition of two states at the same time' (Floridi, 1999: 189). Floridi explains this in more detail but it is the logic that is striking: a 'qubit' (quantum bit) is actually both states '1' or '0' simultaneously although probably not equal. Floridi suggests that Hegelian dialectics might help explain this principle of quantum superposition whereby contradictory positions are reconciled in a higher unity by both being annulled and preserved in synthesis (1999: 190). Might we begin to imagine a concept of 'quantum dialectics'? The analogy to dialectics is further enhanced in describing quantum logic where Boolean operations generate new superpositions and eventually, or at least potentially the desired output (making it truly Hegelian - the example Floridi gives is the synthesis of the finite and infinite making the absolute, 1999: 190). Interestingly, Floridi explains that special logic gates have to be developed to control the interactions between qubits and to generate coherent change - so too, dialectics of course in which coherent change is the desired purpose. The potential is vast, especially when considered in terms of parallel computing but largely theoretical. In other words, the achievement of the absolute is only in potential.