On the Nature of Computing I would like to propose that the natural agenda for Computing is the Virtual, in contrast to the Natural and the Artificial. Let me explain. Over the years, one encounters periodic bouts of navel gazing in the Computing community about the nature of the business we are engaged in. Typically, the debate polarises people along a spectrum (to mix metaphors) between Engineering, and Science. The ends of the spectrum are usually occupied by Practice (Systems, Networking, OS, software engineers and so forth) and Theory (Computability, Complexity, Information Theory, etc). An extreme view of each end places practitioners within EE departments, and theoreticians within Mathematics departments respectively. I studied Natural Sciences in Cambridge as an undergraduate - we were taught the value of study of the natural world, and the use (and advance of mathematics) to describe and understand (and predict) its behaviour. I have also spend over a decade teaching courses in an Electrical Engineering department, where artificial systems are built according to models (often mathematical) that have reliable behaviour. Computing has never lain on a simple line between these two, and nowhere is this clearer than in the confusion often facing PhD students in their first years, trying to select a problem to attack in their thesis work - this is the key to understanding where Computing is a third place in the world of discourse, distinct from the natural and the artificial of sciences and engineering: computing is about creating systems that may never exist, either in nature or by creation of humans. These systems are virtual. PhD students find it hard to find a topic, because the possibilities are endless, and the topic may have no intersection with the real world, either in understanding a phenomenon, or in creating an artifact. Here I completely disagree with Richard Feynman (Footnote 2). Of course, at some point, much computing does result in a model of some thing. An object or process which does interact with, or describe the real world may clearly be the outcome, but it does not have to be. (Footnote 1) This has a very important consequence when explaining what it is that we do, to the public (whether to school children, to non-computing users in general, or to funding agencies and decision makers). Unlike the artificial, engineering, some of what we do may not be obviously useful, and therefore attractive to commerce and governments in optimising social welfare or profit. Unlike the natural, science, some of what we do may not necessarily be simply "for the advancement of pure knowledge", and therefore a priori worthwhile! In some sense, though, what we do underpins both of these other more worldly activities. I really like the claim that Computing is less worldly than, say, Cosmology. On the other hand, due to the possible use of Computing as an underpinning, we can also claim to be more useful than Engineering. Some Examples I would like to take several examples of the virtual from the history of computer science to illustrate my argument. Within the discipline of computing itself, we use the concept of virtualisation as a first class tool. When confronted with intransigent engineering limitations of memory, processors, I/O, and networks, it has been commonplace for decades to abstract: We create virtual memory systems to replace one piece of hardware with another as needed to overcome capacity/performance problems and to choose when to do so appropriately; we replace inconvenient low level processor interfaces (the instruction set) with virtual machines (VM, vmware, Xen, Denali), to provide a more convenient (and stable) interface for the systems programmers; we provide a single API to all I/O devices so that programs need no longer worry whether (say) an MP3 is being loaded from a tape, a magnetic disk, flash RAM, or even networked media; we replace a network with a virtual private network, so that the users can behave as if they were in an Internet of their very own. In the recent world of GRID computing (and especially within the UK e-Science program), we are creating virtual communities of scientists with virtual laboratories, with computing resources dedicated to supporting "in silico" experiments to replace the expensive, error prone and risky "in vivo" or "in vitro" experiments of the past: here we have virtualised natural systems whether fluids such as atmosphere, ocean, or plasma etc,, or complex biological systems such as genomes, proteins, or even ecologies. However it is in the world of entertainment that the convergence of computer games and the movie industry has led to the clearest evidence to support my view that Computing is a wholly new discipline. Here, there are no natural or artificial constraints on what a system may do. The limit is the imagination of the creator, combined with the knowledge and skills from the discipline that is computing. Of course, there are constraints imposed from the discipline itself (e.g. computability, complexity, or just plain affability!), but may often be orthogonal to the goals of the computation (if there are any goals!). Historically, there have been simple examples of virtual worlds (both for games and online environments, or for playing with alternate realities, such as artificial life games and so on), and so this is not supposed to be something that suddenly became true - it has always been one of the exciting, but difficult aspects of working in Computing that the bounds are not set from outside, but by our own choices of what to work on. Conclusion To conclude, Computing occupies a third place which involves creativity and imagination, as it is not bound by the needs to describe what does exist (as is natural science) or what can be built in the real world (as does engineering), and that place is the virtual. We do not need to be complete or consistent or correct, but we possess the tools to choose to be at least any one of these, if we wish. Additional. Footnote 1 I am tempted (as Penrose does in his latest book, lamentably) to lay claim to the term "magic". A lot of what we do is now certainly seen by the lay public as magical - programmers (especially systems people) are often referred to as Gurus, and Sorcerers or Wizards. Given the high goals of white magic, understanding the power of names, the value of pure thought, and so on, this is indeed very attractive. However, there are in fact many historically compelling reasons to avoid this connotation, including the sad history of Newtons later days in alchemical pursuit of the philosophers stone and eternal life, and, of course, the events at Salem and the like! Footnote 2. "Computer science also differs from physics in that it is not actually a science. It does not study natural objects. Neither is it, as you might think, mathematics; although it does use mathematical reasoning pretty extensively. Rather, computer science is like engineering - it is all about getting something to do something, rather than just dealing with abstractions as in the pre-Smith geology.":- Richard Feynman from the Feynman Lectures on Computation. Reference 1 The Road to Reality: A Complete Guide to the Laws of the Universe by Roger Penrose, pub. Jonathan Cape, July 29, 2004, ISBN: 0224044478