Abstraction, Actors and Computers [Presented at Brain Power: Intelligence, Emotion, Cultural Fantasy, 12th Annual Cultural Studies Symposium, Kansas State University, March 6-8, 2003.] Allen Stoughton Department of Computing and Information Sciences, Kansas State University 234 Nichols Hall, Manhattan, KS 66506 allen@cis.ksu.edu Computers are viewed by most people as active entities, which I'll call "actors" for short. They have well-defined boundaries, and they interact with their environment (including us). But what goes on inside computers, and how do humans think about it? When I asked my teenage, very computer-literate daughter this question, she replied (I'm paraphrasing) that computers store and process data, expressed as zeros and ones. This common -- and correct -- view of computers is an abstraction, and it is impossible to think of computers without abstracting in some way. I will argue that, depending upon the abstractions used, and how the abstractions are interpreted, it is possible to think of what goes on inside a single computer in radically different ways. Under some viewpoints, like my daughter's, a computer largely consists of passive data. But in others, computers consist of many actors, which interact with each other and the computer's environment. Different abstractions are useful for different purposes: understanding and designing different levels or aspects of a computer's architecture. We find it easier to understand and design entities that are, or that we imagine to be, active. In a low-level, hardware abstraction, the actor might be the electricity flowing through the system in high (representing one) and low (representing zero) voltages; or it might be the millions of transistors, grouped into gates, that control the flow of the electricity. Hardware designers adopt the later view. In a higher-level, but still hardware, abstraction, the actor is the central processing unit (cpu), which executes programs consisting of instructions stored in the computer's memory; or maybe the instructions are all actors, manipulating the computer's memory, and handing control from themselves to other instructions. Hardware designers adopt the former view, computer programmers the latter one. Programmers rarely program at the hardware-level; instead, they program in high-level programming languages, which are more expressive, involving devices like procedures, which can call other procedures to solve sub-tasks. High-level programs are translated to low-level ones by special programs called compilers, and the resulting hardware programs are very hard to understand directly. When one procedure calls another procedure, it is possible to view the procedures as actors. This is the view adopted by programmers. Typically, computers run a large number of programs, called processes, which interact with each other and the environment. A special program, called the operating system, is responsible for letting one process run on the hardware for a few milliseconds, then letting another process run, etc. From the point of view adopted by designers of operating system, the operating system is an master actor that allows slave actors (the processes) to run at its pleasure. But, since the operating system is fair, it is also possible to view the processes as independent actors, running (conceptually) in parallel. A single process and its data may be physically distributed throughout the computer's memory; from a hardware perspective, it would be hard to recognize the process as a coherent entity. Because of the extensible nature of computers, there is no limit to the software architectures that can be created. It possible for actors to be supplied as data to other actors, which can then run them as needed, or for actors to create virtual environments in which whole families of other actors can function. In summary, depending upon the abstractions being used, and how the abstractions are interpreted, what goes on inside a single computer can be thought of in radically different ways: single actor, many actors, actors as data, actors within actors. Different points of view are necessary in order to get the intellectual traction necessary to achieve certain goals. Understanding all of this may help laypeople develop more useful mental models of how computers work and what they are capable of doing. It may also help workers in other disciplines recognize similar phenomena at work in the systems they study or build, systems which presumably include the brain, but might even include social organizations or ecosystems.