Demystifying Computer Science: An Approach Using Interactive Multimedia
New York University, Gallatin School, MA Thesis

| TITLE PAGE | TABLE OF CONTENTS | BIBLIOGRAPHY | AUTHOR'S HOME PAGE |


Chapter 1: Introduction

Introduction to Information Processing
History of Computers
The User Interface
Computer Literacy


Science fiction author Arthur C. Clarke has said that "any sufficiently advanced technology is indistinguishable from magic" (Decker 1990, 18). I submit that the state of computer technology is advanced enough to prove his assertion correct. To most people, the CPU (central processing unit) - the actual "computer" inside the computer - is a mysterious black box; the programmers and technicians who can understand and fix these devices seem to be magicians. What is a computer? When asked this question most people will discuss the computer's visible features: the keyboard, the monitor, the mouse, the size of the hard disk. These features, however, have very little to do with what a computer really is. In fact, the parts listed above are merely peripherals - devices connected to and controlled by a computer but external to the computer's central processing unit (the CPU). What, then, is the CPU? The CPU is the part of a computer which is responsible for all manipulation of information including all calculations. Consider an automobile: to drive a car requires contact with only the steering wheel, gas pedal and brake. Similarly, operating a computer requires contact with only the input and output devices. Even so, the study of automobiles would focus on the engine. Other parts of the car may be more accessible but it is arguably the internal combustion engine which sets the automobile apart from all previous forms of locomotion. The same is true of the CPU's relationship to the computer; though few users have direct contact with the CPU, the processes of the CPU set digital computers apart from all previous computing devices.

Today, the dominant image in computing is that of the personal computer. Although "computer" and "personal computer" are perceived as synonymous by many users, the category of personal computer has only evolved in the last fifteen years or so. The processes that actually define a computer precede the birth of personal computers and have changed very little since the development of the first digital computers in the 1940s and 1950s. The core theories which are the foundations of digital computing have remained constant, detached from the continual flux generated by improvements to hardware and software. A computer is, by definition, a "multi-purpose symbol manipulation device." This elegant and unchanging definition accurately reflects the unique aspects of computing, yet most people have trouble reconciling this somewhat cryptic description with the actual machine that lets them calculate a bank statement, program a VCR or measure the speed of a baseball. To most people the computer has simply become another tool; as such, the quality of a computer's performance is determined by how little we need consider its "nuts and bolts." With this as the dominant mode of computer-human interaction it is unusual that I ask ordinary computer users to examine the core technologies which drive computer science. However, it is my contention that an introduction to the core concepts of digital processing will demystify computing enough so that the natural curiosity of the user will take over.

Introduction to Information Processing

Let's briefly examine some of the concepts that have contributed to the illusion that computers effect magic. The definition I've given of the computer as a "multi-purpose symbol manipulation device" suggests that the computer is not just an ordinary gadget; nevertheless, computers are primarily perceived as tools by their users. Unlike pencils, paints, typewriters and calculators - some of the tools computers mimic - computers are not limited to one specific task or industry. This "multi-purpose" nature of computing - the ability to transcend one particular role - uniquely distinguishes computers from earlier technological innovations. The computer's ability to flexibly adapt to different roles is due to its reliance on symbolic representation. We generally think of symbols as something like the icons seen on our computer screens but symbols can be broadly described as any method of representing one thing with another. In a graphical user interface the icon we see is a symbol that represents a file or a program stored on the hard disk. Within the CPU, patterns of electrical signals are the symbols used to represent any information the computer can process. All recordable phenomena can be represented as patterns of electrical signals; the process of encoding information this way is called "digitizing" or "analog to digital" conversion. Once this symbolic coding has been done, computers can use abstract logic and mathematics to electrically manipulate information. Using the rules of logic and mathematics, hardware and software designers create complex systems to predictably process electrically coded information.

In order for the computer to do any useful work it must be programmed with a set of instructions called a program or software. As many computer professionals are fond of saying, computers only do what they have been told to do by people. But we don't even perceive most of the operations computers have been programmed to control - we consider them automatic. For example, the screen of my computer is redrawn many times per second; because of this automated process, changes I make to a document appear on the screen immediately. This process occurs because a series of instructions prompt it to do so. Many processes like this are pre-programmed for a computer in the forms of the instruction set, operating system and applications software. The computer user doesn't need to deliver these embedded instructions or even to know what the specific instructions are; as with the human body, some functions are run autonomously, that is, below the level of conscious thought. So, while you need to tell the computer to engage some functions deliberately, other functions may be invoked automatically. These hidden commands have been designed by hardware and software engineers for efficient processing; they speed things up and eliminate the need for you to give the computer repetitious instructions. Every function we deliberately engage is built out of many smaller functions of which we are unaware. This hierarchical branching of instructions exists to such a degree that for every command we consciously execute, thousands - if not millions - of instructions are invoked transparently. Since all of these instructions must execute in the space of time we perceive only one command executing, high speed processing is crucial.

Computer processes are particularly difficult to grasp because they exist in two spheres simultaneously: the physical, electronic world and the abstract symbolic world. In a computer, abstract mathematical theories correspond to physical electronic structures. For a computer to process information, that information must be encoded as electrical signals - these sequences of signals can represent any kind of data. Computers do not comprehend the nature of the information they manipulate - computer hardware itself cannot distinguish between numbers, colors, mathematical functions and directions. To the computer all data and instructions look the same since all are represented as patterns of electrical voltages. The same computers that routinely dazzle us with their speed and computational abilities would be nothing more than expensive doorstops without the complex, step-by-step instructions we call programming. Without programming, computer hardware's only inherent ability is the capability to discern the difference between two signals: a high voltage signal and one of low voltage.

The two possible electrical signals can be symbolically represented as 1 and 0; each signal - whether it be a 1 or a 0 - is referred to as a bit. The use of 1 and 0 is a convention designed for our convenience, the computer remains ignorant of it. This assignment of 1 and 0 to electrical voltages may not seem useful if you are considering the way we usually do arithmetic, but there is another way. The number system we usually use is called the decimal or base ten system because it consists of ten symbols (0,1,2,3,4,5,6,7,8,9); however, using a different number system called the binary or base two system, any number can be represented by using only two symbols (0,1). In order for a computer to work with information, that information must be assigned numerical equivalents; for example, ASCII, a system commonly used to encode text, represents the letter "A" with the number 65 (or 100001 in binary). ASCII is essentially a lookup table in which each character on the keyboard is represented by a specific number. The process of digitizing information begins with describing the data numerically; once numbers are assigned, the ability to represent these numbers with electrical signals becomes a basic necessity for the CPU to process this information.

Digitizing requires that numerically described data be expressed in binary form which can be readily translated into electrical signals. Fortunately for computer users, we do not have to perform these tedious translations; a sophisticated collection of codes stored inside the computer is responsible for these tasks. Information fed to the computer by input devices is translated into electrical signals (machine language) and then back again into information we can understand. Once a bit is encoded, the electrical signal it generates may be used to control the behavior of electronic circuits. A computer's circuits are specifically configured so that the output signal of a circuit can be controlled by varying the voltage of the input signals. The rules these voltage changes follow is known in mathematics as Boolean Logic; only three basic operations are used in Boolean logic, they are referred to as "and," "or," and "not." These functions, conveniently, accept only two possible input choices (e.g., 1 or 0, true or false, high or low). Simple circuits known as "gates" can be constructed to mimic the behavior of these three functions, other gates are constructed as combinations of these basic three. "And" and "or" gates accept two inputs which together determine the condition of the gate and whether the one output signal from this gate will be high or low voltage; a "not" gate accepts one input and passes one output signal of opposite voltage. Groups of gates are connected to one another to produce more complicated comparisons and calculations. The process of logical decision-making is invisible to the computer user but it is responsible for all computer processing at the deepest level. A user who wants to observe these actual processes will be disappointed to discover that it all occurs at such great speed and small size that it is virtually impossible to see. Even if the chip containing all of a computer's circuits was exposed to view it would yield no insights.

History of Computers

Computer scientist David Harel has written that the general public is strangely divided when it comes to computer literacy:

There are those who know absolutely nothing about computers, and then there are the members of the ever- growing class of computer literates... the really unusual phenomenon is that large and important parts of the science of computing are not sufficiently known, not only to members of the first group, but to members of the second group as well. (Harel 1989, 6)

If this is true, it would seem that even the "magicians" lack a complete understanding of computer science. How is this possible? Perhaps a brief look at the history of computing will help explain this phenomenon.

Computer science did not evolve from one specific discipline, but rather it has been a blending of several disparate technologies and sciences. A Computer Perspective, a book published as documentation for a 1971 exhibit on the history of computing, traces the evolution of computers using three technological categories: Calculating Machines (machines used in performing mathematical operations for commerce, tablemaking, and scientific analysis), Statistical Machines (machines used to find relationships within information by sorting and tabulating masses of data), and Logical Automata (machines that use information about their past performance to determine their next scheme). The Information Age exhibit at the Smithsonian Museum of American History traces the history of computers from two sources, communication technologies and computational technologies. Clearly events, developments, and inventions in a number of fields have propelled the computer forward in its evolution. For our purposes let us examine progress from a simple chronological perspective and, perhaps, try to isolate software trends from hardware trends.

According to David Harel, the history of software begins with the Greek mathematician Euclid, who discovered the power of algorithms. Algorithms may be defined as rules of procedure which are applied to solve a mathematically described problem. Between 400 and 300 B.C. Euclid invented a sequence of mathematical procedures which is considered the first "non-trivial" algorithm ever devised. Euclid's algorithm was designed to find the greatest common divisor of two positive integers. It wasn't until 1801 that a method of mechanically storing procedural rules was perfected. The textile industry was the unlikely source of this development. The craft of weaving, which had remained essentially the same for at least 3000 years, was radically changed by Joseph Jacquard's invention of a punch card controlled loom. Up until that point, weaving was presided over by master weavers who took decades to learn their craft; the quantity of high-quality fabric available was limited by the amount that master weavers were able to produce. Weaving patterns for the new Jacquard looms were encoded as holes in cards, these holes were sensed by a special mechanism which controlled the selection of threads and other actions of the machine. Jacquard looms were able to weave not only faster, but more accurately - and they needed the supervision of only unskilled laborers. The knowledge of the master, which could previously be acquired only through many years of apprenticeship, could be diffused simply by building more looms with punch cards. This idea of storing expertise within the machine quickly spread to other industries. Many years passed, however, before the power of this invention was successfully applied to mathematics. The key word there is successfully because in the mid 1800s inventor and mathematician Charles Babbage did try to apply this principle to calculation. He designed a calculator called the Analytical Engine which was to be capable of performing any series of mathematical instructions given to it on punched cards. It was to be powered by steam and use mechanical gears and levers. Due to its complex design the device was never built and Babbage's work fell into obscurity. His plan is now viewed as about a hundred years ahead of its time. Even into the 20th century calculating devices were based on technology developed as early as 1642. In that year Blaise Pascal (after whom the programming language Pascal is named) invented a mechanical adder that used rotating wheels much like the ones in today's automobile odometers.

In the late 1930s electronic technology was sufficiently developed so that research on calculating devices began using electrical relays rather than mechanical gears and levers. Electrical signals could be used to move switches thousands of times faster and more reliably than mechanical switches. It was around this time that calculating endeavors began to receive support from the military which hoped that the new machines would be able to meet their escalating demands for accurate calculation. During World War II both the Americans and British developed applications for electronic computers. The British developed the Colossus, a calculating machine designed to break codes, while the Americans developed ENIAC to calculate ballistic firing tables. Computers like ENIAC (1946) and UNIVAC (produced as late as 1951) used vacuum tubes as their electronic switches. Vacuum tubes were responsible for the enormous size of these computers; tubes had to be spaced far enough apart so as not to overheat each other. As a result ENIAC occupied about 15,000 square feet - programmers could actually walk through the computer's CPU. In these early computers, software and hardware were inseparable; programs were hard-wired into the processor by manually setting the switches of the computer for each program that was to be run. Each time a new problem was to be solved by the computer the processor needed to be manually reconfigured. The notion of storing a program within the computer's own memory was introduced by English mathematician Alan Turing and successfully executed by John von Neumann working in the United States. Turing introduced his theory in a paper published in 1936; the type of machine he proposed is described today as a "Turing machine." The theoretical machine received its input from a tape of infinite length. The symbols on this tape - which were not specifically numbers - encoded the instructions or data meant to determine the machine's sequence of actions. The machine included a read/write mechanism which had a finite number of possible states. This device could:

a. Read one symbol from the tape, and, based on that symbol and the current state,

b. Write another symbol over the current symbol,

c. Change the current state, and

d. Move left or right on the tape. (Decker 1990, 277)

In this simple model there were several ideas which were to revolutionize the software end of computing. Turing's "tape" suggested a way of storing instructions and his use of abstract symbols paved the way for computer scientists to represent their data with electrical signals.

The idea of representing information as electrical signals had been around since the mid-nineteenth century with the telegraph and morse code, but at first it didn't occur to anyone that binary numbers would be particularly important to calculating machines. It seemed natural to use wheels marked off with all ten digits as Pascal did, and in fact both Colossus and ENIAC used decimal numbers. In the 1930s mathematician Claude Shannon demonstrated how electronic circuits could be used to perform simple binary arithmetic but the idea of encoding information as binary signals didn't become crucial to computing until von Neumann introduced the idea of using an internally stored program. In 1945 the Institute for Advanced Study made an exception in their policy that no experimental work be done there so that John von Neumann could construct the first fully automatic digital, all-purpose computing machine. In this computer (EDVAC) instructions could be stored in the computer's electronic memory as numbers and treated in exactly the same manner as numerical data. Prior to von Neumann's experiment all instructions had been entered on punched paper tape or by plugboards. EDVAC's logical choices of program sequences could be made inside the machine and the instructions could be modified by the computer as it went along - an obvious improvement over previous machines which had to be tediously re-wired for each new problem. A stored program, like the one used by von Neumann, itself controls the "re-wiring" by signaling the hardware to set its switches. (Eames 1990, 137)

After the digital computer was invented, hardware changed very little in theory but tremendously in practicality; the practical changes have been due to the development of smaller and faster processors - a computing trend which continues today. Due to inventions and discoveries in the fields of electronics and physics the processor of the computer went from being as large as a building to smaller than a postage stamp in only a few decades. In 1947 transistors were invented at Bell Labs and these quickly replaced vacuum tubes as the switching devices used in computers. Aside from the obvious difficulties posed by the size of vacuum tubes there was also a reliability problem; the tubes changed most electricity to heat as a byproduct and often burned out. Transistors ran cooler, were more electrically efficient and were much smaller and cheaper. Integrated circuits (1960s) were the next step in decreasing size; they allowed miniaturization of an entire circuit. To make ICs the surface of a silicon chip is carved out into tiny parts, each of which behaves like a different part of a circuit. Finally, microprocessors were created which miniaturize an entire computer on a a single chip. This change in scale meant that the inner workings of the computer could no longer be explained by simply pointing to actual circuits; one would need to diagram the connections or explain the computer's workings in theory. The aura of mystery surrounding the computer could only be increased by miniaturization which rendered the technology virtually opaque to any observer who lacks an electron microscope.

Once von Neumann successfully demonstrated the power of the stored program, software began to change radically. Up until that point programmers had to adapt to using the language of the machine; a copy panel at the Boston Computer Museum provides a compelling description of this process:

Through the 1950s, programmers had to spell out every operation for a computer down to the smallest detail - as if, to touch your nose, you had to tell your brain where your nose was, then explain muscle by muscle how to move your finger to it. As you can imagine, programming was slow and difficult.

The language used by these early programmers consisted of electrical signals which the programmers expressed as numbers, these numbers were the computer's "machine language." The first programming languages were called assembly languages. The development of these languages demonstrated a recognition that programs were meant to be used by people as well as by the machine. Clearly, people must write, maintain and modify programs but these tasks were nearly impossible to accomplish in machine language. The set of instructions that a microprocessor can decode and execute is called its machine language. Think of this as a language that only contains about 150 words; whatever task you want the microprocessor to do must be written in this language. Today, a typical microprocessor, or computer chip, understands about 150 different instructions; that is, it can decode and execute about 150 different instructions. Assembly language is nearly the same as machine language but a few letters are used to represent basic computer functions and a computer program translates these assembly-language statements into machine-language statements. In most cases, each assembly-language statement translates into a single machine-language statement (there is a 1 to 1 correspondence between assembly language statements and machine language statements). Assemblers are machine specific due to this 1 to 1 mapping of assembly language to machine language.

In the next wave of software advances, software designers created high level programming languages like FORTRAN (1957), COBOL (1964), and Pascal (1970s). These languages more closely resemble spoken language and automatically assume some mundane tasks like assigning memory locations. Higher level languages which have these kinds of functions built in come in two different flavors: ones that translate the source code into machine language one line at a time and then run each line are called interpreters; programs which translate the entire program all at once and run it all at once are called compilers. Interpreters are advantageous because they are easy to debug and fairly easy to write. Compilers are useful because they run more quickly - but they can be difficult to use when one needs to isolate a problem. All of these languages are translated automatically into machine language; the programmer doesn't need to know the specific idiosyncracies of different machines since a translation program assumes responsibility for those concerns. Most programmers today have no knowledge whatsoever of their computer's machine language or of the content and structure of the translators that mediate between the machine language and their chosen programming language. This explains how it is possible for some software wizards to write programs without understanding basic computer science.

The User Interface

Early commercial computers were not developed for use by non-technical users, and when the only users of computers were programmers, the user interface was of little concern. But by the 1970s computer manufacturers had begun marketing computers to the general public - and most of this public had no background in the concepts associated with computer programming. Furthermore, methods used in computer programming were far too involved for most people to engage in. Software publishers responded by designing software interfaces that could be used by just about anyone - including those without specialized training. Software packages were prepared by specialized professionals to perform specific specialized tasks like office accounting, word processing and data tabulation. Computer scientists, software developers and hardware engineers are proud of the fact that today you don't need to know how a computer works in order to use one. This present state of the art is the result of a concerted effort by these professionals - the magicians I mentioned earlier - to create a "user-friendly" interface. The side effect of this friendly interface is that the software end of computing has become just as opaque as the hardware end. The graphical user interfaces (GUIs) we are now familiar with bear only an analogous relationship to the internal processes of the computer, thus the user is insulated from any direct observation of the computer's programming.

The history of computing should not be presented as an inevitable drive toward popularization. While there have been trends like plummeting costs and easier to use interfaces, there have also been historical forces which tended to restrict computer use to a technical elite. Knowledge of computer science has traditionally been diffused through computer science departments in academic institutions. In most university settings, the Mathematics or Engineering department became responsible for computer education and for many years computers were only available to students at the college level or above and their use was restricted to special projects. The special projects requiring computers were were generally math driven and were often sponsored by the military. The military's involvement in the advancement of computer science may have generated an aura of secrecy and unapproachability. Perhaps because computer science was traditionally linked to mathematics, it seemed to evoke the same kind of anxiety that mathematics was known to produce. Because computers were marketed to increase efficiency there was an additional fear that the devices were meant to replace the human workers. This kind of antagonism was only increased by the lack of understanding most users had regarding the limitations of computer reasoning. This antagonism still exits: the computer phobia embodied by HAL in 2001 remains a powerful warning message in our popular culture. A 1975 report entitled "On the Sociology of Computing" proposed that there are messages termed "meta-messages" embedded in human-computer dialogues. These messages convey the authority of the computer and the subordinance of the human user. Although the intention may be friendliness, the subtext may be "understand or you're a dummy." Evidence for the existence of these embedded messages can be seen in the results of research on the assumptions made by users of a text editing system. When asked to interpret the word "command" about 70 percent of these users thought commands were directives given to them by the computer. (Sim 1975; Thomas and Carroll 1981 in Goldes 1986, 157) Despite the benign intent of software engineers and interface designers, people perceive in computers an authority - this betrays a basic fear.

Many would observe today that the young are the least intimidated by personal computers - many marvel at how easily children are able to use such complex technology. However, the same trends responsible for producing computers "even a child can use" have also been ultimately responsible for sealing off its functions from curious users. Miniaturization of the hardware and the development of interfaces that use several layers of programming to hide the actual processes of the CPU have combined to obscure the working parts of a computer.

It has been suggested that we have become so accustomed to living in ignorance of the technology that surrounds us that we are no longer intrigued by the "magic" we have created. And yet cognitive psychologist Jerome Bruner has written, "If you should ask me as a student of thought processes what produces the most fundamental form of pleasure in man's intellectual life, I think I would reply that it is the reduction of surprise and complexity to predictability and simplicity." (Bruner 1962, 110) Clearly we deny ourselves this pleasure when we accept our ignorance of technology and do not attempt to understand how it functions.

Computer Literacy

This project operates in the margins of an instructional category that has been labelled "computer literacy" by educational institutions. The tremendous growth in numbers of computers in the workplace, home and schools has resulted in recommen dations that computer literacy be taught in the classroom, yet the term "computer literacy" is problematic in and of itself because there appears to be no consensus on what computer literacy is meant to encompass.

Recent efforts to bring computers to the classroom were motivated by the desire to use these computers as teaching tools for exploring other subject areas. Based on the findings of the IEA[1] "Computers-in-Education" Study, through the 1980s and the early 90s there has been a decline in the proportion of computer time being spent on programming instruction relative to the total amount of time computers are used at school. This reflects the diversity of uses that computers are being put to in the schools; in 1989 computer applications other than programming were the major focus in more than 80% of high school classes. This suggests that more attention has been focused on how to use the computer to enrich specific content areas like science, math and history than on how to use the computer itself (Becker 1993, 70-71). Such statistics indicate that the focus of educational computing has shifted away from teaching how computers work and toward how to make educational use of computers. Advocates of computer literacy universally endorse the idea that students should be instructed in how computers are used and that they should be shown how to use a few specific types of programs (word processing, spreadsheets, databases). The specific aspects of computer science I have chosen to focus on in this project are often excluded from discussions of computer literacy. If we define computer literacy narrowly as how to use computers, then educational computing appears to be a cognitive dead end. I argue that to define computer literacy in such a limited way further reinforces the myth that computer processes are mysterious and unknowable. By teaching only the minimum required to accomplish a task and by encouraging the development of narrow rather than broad knowledge we are, peculiarly, mimicking the one flaw we identify in computers.

Many argue that the one area of information processing in which humans still dominate computers is the human ability to apply knowledge flexibly to different contexts and adapt to new problems. When computer literacy advocates promote instruction on computer use, excluding the basic concepts of programming and digital processing, computer users are relegated to memorizing seemingly disconnected actions and reactions. Computer users with this degree of basic literacy may learn to master one program or even one operating system but will lack the confidence to try new or different systems as they evolve; lacking general knowledge of computer processes they will be lost in the details. On the other hand, knowledge of how a CPU works is applicable to any computer platform, program or interface. Such understanding builds confidence in the user's ability to reason through new situations; general knowledge can only ease the anxiety generated by use of a new program or machine in a new setting. It is my thesis that the emerging tools of interactive multimedia give us new possibilities for presenting material which is usually hidden from view. My objective was to design an instructional multimedia program which would uncover the hidden processes of computing. I used cognitive theory and multimedia games to connect the user with the processes occurring inside the mysterious black box known as the CPU. By demystifying the forboding and confusing topic of digital processing I hope this project will encourage its users to challenge the current boundaries of computing. Perhaps it will also empower or encourage ordinary computer users to participate in the policy decisions that are today reshaping the computer and communications spheres.

Next Chapter

Copyright © 1996 by Lisa H. Weinberg