A computer is an apparatus built to perform routine calculations with speed, reliability, and ease. Three important types are: \Ldigital computer\ls, which function internally and perform operations exclusively with digital (discrete) numbers (a type on which most recent progress has centered and which is the focus of much of this article); \Tanalog\t \Tcomputers\t, which use continuously variable parts exclusively for internal representation of magnitudes and to accomplish their built-in operations; and the less-common \Thybrid\t \Tcomputers\t, which use both continuously variable techniques and discrete digital techniques in their operation. Digital, analog, and hybrid computers are conceptually similar in that they all depend on outside instructions; in practice, however, they differ most noticeably in the means they provide for receiving new programs to do new calculating jobs. Digital computers receive new programs quite easily via manual instructions or, in modern versions, via automatic means. For analog or hybrid computers, however, reprogramming is likely to involve partial disassembly and reconnection of mechanisms and components. Because analog computers are assemblies of physical apparatuses arranged so as to enact the specific type of mathematical relationship for which solutions are to be computed, the choice of a new relationship may require a new assembly. To the extent that analog machines can be considered programmable, their program is rebuilt into their structure for each job. HISTORY OF COMPUTERS Historically, the most important early computing instrument is the \Tabacus\t, which has been known and widely used for more than 2,000 years. It is simply a wooden rack holding parallel wires on which beads are strung. When these beads are manipulated (moved along the wire) according to "programming" rules that the user must memorize, all ordinary arithmetic operations can be performed. Another computing instrument, the \Tastrolabe\t, was also in use about 2,000 years ago for navigation. Blaise \TPascal\t is widely credited with building the first "digital calculating machine" in 1642. It performed only additions of numbers entered by means of dials and was intended to help Pascal's father, who was a tax collector. In 1671, Gottfried Wilhelm von \TLeibniz\t invented a computer that was built in 1694; it could add and, by successive adding and shifting, multiply. Leibniz invented a special "stepped gear" mechanism for introducing the addend digits, and this mechanism is still in use. The prototypes built by Leibniz and Pascal were not widely used but remained curiosities until more than a century later, when Tomas of Colmar (Charles Xavier Thomas) developed (1820) the first commercially successful mechanical calculator that could add, subtract, multiply, and divide. A succession of improved "desk-top" mechanical calculators by various inventors followed, so that by about 1890 the available built-in operations included accumulation of partial results, storage and reintroduction of past results, and printing of results, each requiring manual initiation. These improvements were made primarily to suit commercial users, with little attention given to the needs of science. Babbage While Tomas of Colmar was developing the desk-top calculator a series of very remarkable developments in computers was initiated in Cambridge, England, by Charles \TBabbage\t, a mathematics professor. Babbage realized (1812) that many long computations, especially those needed to prepare mathematical tables, consisted of routine operations that were regularly repeated; from this he surmised that it ought to be possible to do these operations automatically. He began to design an automatic mechanical calculating machine, which he called a "difference engine," and by 1822 he had built a small working model for demonstration. With financial help from the British government, Babbage started construction of a full-scale difference engine in 1823. It was intended to be steam-powered; fully automatic, even to the printing of the resulting tables; and commanded by a fixed instruction program. The difference engine, although of limited flexibility and applicability, was conceptually a great advance. Babbage continued work on it for 10 years, but in 1833 he lost interest because he had a "better idea"--the construction of what today would be described as a general-purpose, fully program-controlled, automatic mechanical digital computer. Babbage called his machine an "analytical engine"; the characteristics aimed at by this design show true prescience, although this could not be fully appreciated until more than a century later. The plans for the analytical engine specified a parallel decimal computer operating on numbers (words) of 50 decimal digits and provided with a storage capacity (memory) of 1,000 such numbers. Built-in operations were to include everything that a modern general-purpose computer would need, even the all-important "conditional control transfer" capability, which would allow instructions to be executed in any order, not just in numerical sequence. The analytical engine was to use \Lpunched card\ls (similar to those used on a Jacquard loom), which were to be read into the machine from any of several reading stations. The machine was to operate automatically, by steam power, and would require only one attendant. Babbage's computers were never completed. Various reasons are advanced for his failure, most frequently the lack of precision machining techniques at the time. Another conjecture is that Babbage was working on the solution of a problem that few people in 1840 urgently needed to solve. After Babbage there was a temporary loss of interest in automatic digital computers. Between 1850 and 1900 great advances were made in mathematical physics, and it came to be understood that most observable dynamic phenomena can be characterized by differential equations, so that ready means for their solution and for the solution of other problems of calculus would be helpful. Moreover, from a practical standpoint, the availability of steam power caused manufacturing, transportation, and commerce to thrive and led to a period of great engineering achievement. The designing of railroads and the construction of steamships, textile mills, and bridges required differential calculus to determine such quantities as centers of gravity, centers of buoyancy, moments of inertia, and stress distributions; even the evaluation of the power output of a steam engine required practical mathematical integration. A strong need thus developed for a machine that could rapidly perform many repetitive calculations. Use of Punched Cards by Hollerith A step toward automated computation was the introduction of punched cards, which were first successfully used in connection with computing in 1890 by Herman \THollerith\t and James Powers, working for the U.S. Census Bureau. They developed devices that could automatically read the information that had been punched into cards, without human intermediation. Reading errors were consequently greatly reduced, work flow was increased, and, more important, stacks of punched cards could be used as an accessible memory store of almost unlimited capacity; furthermore, different problems could be stored on different batches of cards and worked on as needed. These advantages were noted by commercial interests and soon led to the development of improved punch-card business-machine systems by International Business Machines (IBM), Remington-Rand, Burroughs, and other corporations. These systems used electromechanical devices, in which electrical power provided mechanical motion--such as for turning the wheels of an adding machine. Such systems soon included features to feed in automatically a specified number of cards from a "read-in" station; perform such operations as addition, multiplication, and sorting; and feed out cards punched with results. By modern standards the punched-card machines were slow, typically processing from 50 to 250 cards per minute, with each card holding up to 80 decimal numbers. At the time, however, punched cards were an enormous step forward; they provided a means of input, output, and memory storage on a massive scale. For more than 50 years following their first use, punched-card machines did the bulk of the world's business computing and a considerable portion of the computing work in science. Automatic Digital Computers By the late 1930s punched-card machine techniques had become so well established and reliable that Howard Hathaway \TAiken\t, in collaboration with engineers at IBM, undertook construction of a large automatic digital computer based on standard IBM electromechanical parts. Aiken's machine, called the Harvard Mark I, handled 23-decimal-place numbers (words) and could perform all four arithmetic operations; moreover, it had special built-in programs, or subroutines, to handle logarithms and trigonometric functions. The Mark I was originally controlled from prepunched paper tape without provision for reversal, so that automatic "transfer of control" instructions could not be programmed. Output was by card punch and electric typewriter. Although the Mark I used IBM rotating counter wheels as key components in addition to electromagnetic relays, the machine was classified as a relay computer. It was slow, requiring 3 to 5 seconds for a multiplication, but it was fully automatic and could complete long computations without human intervention. Mark I was the first of a series of computers designed and built under Aiken's direction. Electronic Digital Computers The outbreak of World War II produced a desperate need for computing capability, especially for the military. New weapons systems were produced for which trajectory tables and other essential data were lacking. In 1942, John P. \TEckert\t, John W. \TMauchly\t, and their associates at the Moore School of Electrical Engineering of the University of Pennsylvania decided to build a high-speed electronic computer to do the job. This machine became known as \TENIAC\t, for "Electrical Numerical Integrator And Calculator" (see \TENIAC\t). The size of its numerical word was 10 decimal digits, and it could multiply two such numbers at the rate of 300 products per second, by finding the value of each product from a multiplication table stored in its memory. \TENIAC\t was thus about 1,000 times faster than the previous generation of relay computers. \TENIAC\t used 18,000 standard vacuum tubes, occupied 167.3 sq m (1,800 sq ft) of floor space, and consumed about 180,000 watts of electrical power. It had punched-card input and output and arithmetically had 1 multiplier, 1 divider-square rooter, and 20 adders employing decimal "ring counters," which served as adders and also as quick-access (0.0002 seconds) read-write register storage. The executable instructions composing a program were embodied in the separate units of \TENIAC\t, which were plugged together to form a route through the machine for the flow of computations. These connections had to be redone for each different problem, together with presetting function tables and switches. This "wire-your-own" instruction technique was inconvenient, and only with some license could \TENIAC\t be considered programmable; it was, however, efficient in handling the particular programs for which it had been designed. \TENIAC\t is generally acknowledged to be the first successful high-speed electronic digital computer (EDC) and was productively used from 1946 to 1955. A controversy developed in 1971, however, over the patentability of \TENIAC\t's basic digital concepts, the claim being made that another U.S. physicist, John V. \TAtanasoff\t, had already used the same ideas in a simpler vacuum-tube device he built in the 1930s while at Iowa State College. In 1973 the court found in favor of the company using the Atanasoff claim. The Modern "Stored Program" EDC Intrigued by the success of \TENIAC\t, the mathematician John \Tvon Neumann\t undertook (1945) a theoretical study of computation that demonstrated that a computer could have a very simple, fixed physical structure and yet be able to execute any kind of computation effectively by means of proper programmed control without the need for any changes in hardware. Von Neumann contributed a new understanding of how practical fast computers should be organized and built; these ideas, often referred to as the stored-program technique, became fundamental for future generations of high-speed digital computers and were universally adopted. The stored-program technique involves many features of computer design and function besides the one named; in combination, these features make very-high-speed operation feasible. Details cannot be given here, but a glimpse may be provided by considering what 1,000 arithmetic operations per second implies. If each instruction in a job program were used only once in consecutive order, no human programmer could generate enough instructions to keep the computer busy. Arrangements must be made, therefore, for parts of the job program called subroutines to be used repeatedly in a manner that depends on how the computation progresses. Also, it would clearly be helpful if instructions could be altered as needed during a computation to make them behave differently. Von Neumann met these two needs by providing a special type of machine instruction called conditional control transfer--which permitted the program sequence to be interrupted and reinitiated at any point--and by storing all instruction programs together with data in the same memory unit, so that, when desired, instructions could be arithmetically modified in the same way as data. As a result of these techniques and several others, computing and programming became faster, more flexible, and more efficient, with the instructions in subroutines performing far more computational work. Frequently used subroutines did not have to be reprogrammed for each new problem but could be kept intact in "libraries" and read into memory when needed. Thus, much of a given program could be assembled from the subroutine library. The all-purpose computer memory became the assembly place in which parts of a long computation were stored, worked on piecewise, and assembled to form the final results. The computer control served as an errand runner for the overall process. As soon as the advantages of these techniques became clear, the techniques became standard practice. The first generation of modern programmed electronic computers to take advantage of these improvements appeared in 1947. This group included computers using random access memory (RAM), which is a memory designed to give almost constant access to any particular piece of information. These machines had punched-card or punched-tape input and output devices and RAMs of 1,000-word capacity with an access time of 0.5 Greek mu sec (0.5 X 10 to the power of minus 6 sec); some of them could perform multiplications in 2 to 4 Greek mu sec. Physically, they were much more compact than \TENIAC\t: some were about the size of a grand piano and required 2,500 small electron tubes, far fewer than required by the earlier machines. The first-generation stored-program computers required considerable maintenance, attained perhaps 70% to 80% reliable operation, and were used for 8 to 12 years. Typically, they were programmed directly in machine language, although by the mid-1950s progress had been made in several aspects of advanced programming. This group of machines included EDVAC and \TUNIVAC\t (see \TUNIVAC\t), the first commercially available computers. Advances in the 1950s Early in the 1950s two important engineering discoveries changed the image of the electronic-computer field, from one of fast but often unreliable hardware to an image of relatively high reliability and even greater capability. These discoveries were the magnetic-core memory and the transistor-circuit element (see \Tcomputer memory\t). These new technical discoveries rapidly found their way into new models of digital computers; RAM capacities increased from 8,000 to 64,000 words in commercially available machines by the early 1960s, with access times of 2 or 3 msec. These machines were very expensive to purchase or to rent and were especially expensive to operate because of the cost of expanding programming. Such computers were typically found in large computer centers--operated by industry, government, and private laboratories--staffed with many programmers and support personnel. This situation led to modes of operation enabling the sharing of the high capability available; one such mode is batch processing, in which problems are prepared and then held ready for computation on a relatively inexpensive storage medium, such as magnetic drums, magnetic-disk packs, or magnetic tapes. When the computer finishes with a problem, it typically "dumps" the whole problem--program and results--on one of these peripheral storage units and takes in a new problem. Another mode of use for fast, powerful machines is called time-sharing. In time-sharing the computer processes many waiting jobs in such rapid succession that each job progresses as quickly as if the other jobs did not exist, thus keeping each customer satisfied. Such operating modes require elaborate "executive" programs to attend to the administration of the various tasks. Advances in the 1960s In the 1960s efforts to design and develop the fastest possible computers with the greatest capacity reached a turning point with the completion of the LARC machine for Livermore Radiation Laboratories of the University of California by the Sperry-Rand Corporation, and the Stretch computer by IBM. The LARC had a core memory of 98,000 words and multiplied in 10 Greek mu sec. Stretch was provided with several ranks of memory having slower access for the ranks of greater capacity, the fastest access time being less than 1 Greek mu sec and the total capacity in the vicinity of 100 million words. During this period the major computer manufacturers began to offer a range of computer capabilities and costs, as well as various peripheral equipment--such input means as consoles and card feeders; such output means as page printers, cathode-ray-tube displays, and graphing devices; and optional magnetic-tape and magnetic-disk file storage. These found wide use in business for such applications as accounting, payroll, inventory control, ordering supplies, and billing. \Lcentral processing unit\ls (CPUs) for such purposes did not need to be very fast arithmetically and were primarily used to access large amounts of records on file, keeping these up to date. By far the greatest number of computer systems were delivered for the more modest applications, such as in hospitals for keeping track of patient records, medications, and treatments given. They are also used in automated library systems, such as \Lmedlar\ls, the National Medical Library retrieval system, and in the Chemical Abstracts system, where computer records now on file cover nearly all known chemical compounds. Recent Advances The trend during the 1970s was, to some extent, away from extremely powerful, centralized computational centers and toward a broader range of applications for less-costly computer systems. Most continuous-process manufacturing, such as petroleum refining and electrical-power distribution systems, now use computers of relatively modest capability for controlling and regulating their activities. In the 1960s the programming of applications problems was an obstacle to the self-sufficiency of moderate-sized on-site computer installations, but great advances in applications programming languages (see \Tsoftware, computer\t) are removing these obstacles. Applications languages are now available for controlling a great range of manufacturing processes, for computer operation of machine tools, and for many other tasks. Moreover, a new revolution in computer hardware is well under way, involving miniaturization of computer-logic circuitry and of component manufacture by what are called large-scale integration, or LSI, techniques. In the 1950s it was realized that "scaling down" the size of electronic digital computer circuits and parts would increase speed and efficiency and thereby improve performance--if only manufacturing methods were available to do this. About 1960 photoprinting of conductive circuit boards to eliminate wiring became highly developed. Then it became possible to build resistors and capacitors into the circuitry by photographic means (see \Tprinted circuit\t). In the 1970s vacuum deposition of transistors became common, and entire assemblies, such as adders, shifting registers, and counters, became available on tiny "chips." In the 1980s very large scale integration (VLSI), in which hundreds of thousands of transistors are placed on a single chip, is becoming increasingly common. Many companies, some new to the computer field, introduced in the 1970s programmable \Lminicomputer\ls supplied with software packages. The size-reduction trend continued with the introduction of personal computers (see \Tcomputer, personal\t), which are programmable machines small enough and inexpensive enough to be purchased and used by individuals. Manuy companies such as Apple Computer and Radio Shack introduced very successful personal computers in the 1970s, spurred on in part by a fad in computer, or video, games. In the 1980s some attrition occurred in the crowded personal computer field, with Apple and IBM remaining particularly strong. In semiconductor chip manufacture, the Intel Corporation and Motorola Corporation were very competitive into the 1980s, although Japanese firms were making strong economic inroads, especially in the area of memory chips. By the late 1980s, some personal computers were run by \Lmicroprocessor\ls that, handling 32 bits of data at a time, could process about 4 million instructions per second. Microprocessors equipped with ROM, or read-only memory (which stores constantly used, unchanging programs), now perform an increasing number of process-control, testing, monitoring, and diagnosing functions, as in automobile ignition systems, automobile-engine diagnosis, and production-line inspection tasks. The U. S. firms of Cray Research and Control Data Inc. dominated the field of supercomputers, or the most powerful computer systems, through the 1970s and 1980s. In the early 1980s, however, the Japanese government announced a massive plan to design and build a new generation of supercomputers. This new generation--the so-called fifth generation--is employing new technologies in very large-scale integration, along with new programming languages, and will be capable of astounding feats in the area of artificial intelligence, such as voice recognition and parallel processing. Progress in the area of software has not matched the great strides in hardware. Software has become the major cost of many systems because programming productivity has not increased very rapidly. New programming techniques, such as object-oriented programming, have been developed to help alleviate this problem. Despite difficulties with software, however, the cost per calculation of computers is rapidly decreasing, and their convenience and efficiency is expected to increase in the foreseeable future. The computer field continues to experience tremendous growth. Computer networking, computer mail, and electronic publishing are just a few of the applications that have matured in recent years. Advances in technologies continue to produce less expensive and more powerful computers offering the promise that in the near future computers or terminals will reside in most homes, offices, and schoolrooms. Julian Bigelow HOW A DIGITAL COMPUTER WORKS Digital Encoding and Processing In order to process numbers and data electronically, it is necessary to represent information as electrical quantities. In order to represent the ten digits of the decimal number system, one might choose a set of ten electrical values and assign one value to each of the ten digits. While this arrangement is straightforward, it is not employed in computers because the broad range of values needed makes practical circuits impossible to build. In addition, when characters other than numbers are included in the list of items to be processed, the increased number of distinct values becomes unworkable. To solve the problem, all data is coded as binary numbers (see \Tbinary number\t). The most reliable distinction that can be realized in electrical systems occurs when only two possible values exist. a light bulb that may be either on or off is an example; the two possibilities are distinct and unmistakable. The two binary values zero and one are used to represent the electrical ideas off and on. These individual digits are usually referred to as \Lbit\ls. A way of extending the set of possible representations beyond two is also required. If a string of zeros and ones is allowed to represent a digit or character, then the number of possible representations becomes the value of two to the power of the number of bits. For example, if four bits are used, then there are 2 to the 4th, or sixteen, possible four bit sequences that can be built. The set of sequences is as follows: 0000, 0001, 0010, 0011, 0100, 0101, 0110, 0111, 1000, 1001, 1010, 1011, 1100, 1101, 1110, 1111. This set can, of course, be used to represent sixteen characters and digits rather than only ten. If six-bit sequences are used, then 64 possible characters and digits can be represented. This binary coding of items is the principal means for representing all data in electronic computers. Many different lengths of bit sequences are in use. Some common lengths are four, six, and eight. Typically, the ten digits of decimal arithmetic are represented by the first ten sequences in the four-bit strings listed above. This is called the binary-coded-decimal representation. Inside the computer, electronic on and off states are realized using basic logic units called gates. Ordinary light switches are observable examples of electronic gates. As the required operations of a computer became more complex, switches were developed that have a variety of ways in which they can be turned on or off. In order to systematically describe these ways, two elementary functions are defined. These are the AND function and the OR function, which operate in the following manners: the result of the AND function with any number of binary values is truth if all the values are true; otherwise, it is false. Generally, a one corresponds to a true value, and a zero corresponds to a false value. The result of the OR function with any number of binary values is truth if any one (or more) of the values is true. By applying these two functions along with the inverse function, which takes any value and produces the opposite value, one can describe any required activity in digital processing. In modern electronic computers the \Ttransistor\t is the device that acts as a switch. When computers using transistors were first built, the size of each transistor was about 1/8 square-inch. Today, hundreds of transistors can reside in a comparable space when integrated in a \Tsemiconductor\t chip (see \Tintegrated circuit\t). The technologies and processes that are used to make microscopic integrated circuits--such as masking, etching, and \Tepitaxy\t--are themselves made possible by computers (see \Tcomputer-aided design and computer-aided manufacturing\t). These technologies take advantage of the unique properties of silicon to create not only transistors, but also complex conducting pathways and other elements within single, small chips. Components of a Digital Computer Any digital computer contains four basic elements: an arithmetic and logic unit, a memory unit, a control unit, and input-output units. Because computers are now used for all sorts of purposes, ranging from calculating the route of a spacecraft to controlling a washing machine, the contents of each of the basic elements vary greatly. Each element must be present, however. The arithmetic and logic unit is that part of the computer where data values are manipulated and calculations performed. This section of the computer usually contains numerous registers and paths between these registers. Registers are collections of memory devices that can save particular values. For example, when numbers are to be added, they must be present at a physical location in the computer where the addition is to take place. The register can accommodate this. A circuit then uses the contents of the register in determining the sum. The idea is identical to the manner in which one would add two numbers on a piece of paper. In a typical application a computer performs thousands of calculations every second. It is impossible to keep all values needed in registers at every moment, so that calculational speed becomes a factor in determining a computer's working capacity. Mathematical functions other than addition may be built into an arithmetic and logic unit. These include subtraction, multiplication, and division. Not all computers are built to perform calculations with values. Some are designed to sort out lists of items or select items having a certain property. For example, a library may have its entire card catalog stored in a computer. When a borrower is seeking a particular title, the computer is give the task of searching the library booklist and comparing the desired title with the list. This is not an arithmetic problem, but a logic problem. Logic problems involve examining values for certain properties and making decisions based on those properties. All logic problems can be described as a collection of AND, OR, and inverse (NOT) functions. Because all the operands needed for execution of arithmetic and logic functions cannot be stored in registers, another means is provided: the memory unit (see \Tcomputer memory\t). The memory unit stores data that is not currently being processed. The operation of a computer requires a list of procedural instructions, that are also stored in the memory. There are two types of memory: primary memory, which stores data and instructions that are used most often, and secondary memory, which stores related information that is used less often. Secondary memory will typically store a large batch of data that a program in primary memory will evaluate. The process of summoning content from the memory is referred to as a fetch operation. The process of saving a value in memory is called a store, or sometimes write, operation. When contents stored in memory are needed often, as in the case of procedural instructions, the computer must fetch the information quickly and not necessarily in sequential order. Primary memory is employed for this task. The contents of certain segments of primary memory can be replaced during execution of a program if data that is needed is stored in secondary memory. Secondary memory is sometimes referred to as bulk memory. When information stored in secondary memory is to be used, the computer usually must fetch much more than the specific data needed. For example, the names, heights, weights, ages, grades, and other data for a class of students might be stored in secondary memory. In order to determine the average weight of the members of the class, the computer would fetch all the information into primary memory. It would then follow instructions for extracting the weight of each member. Finally, an average would be calculated using the arithmetic and logic unit. Secondary memory is ordinarily stored on magnetic tapes or disks. In the same way that audio tapes and records are segmented into songs, secondary memory is segmented into files. The process of getting information into and out of the computer is handled by an input/output unit. \Tinput/output devices\t bridge the gap between data in the form used by the computer ad data in the form used with a particular access device. A computer \Tkeyboard\t is such a device; it is a palette of characters including letters, numbers, punctuation marks, and special terms. The computer processor interprets only strings of zeros and ones, so that the keyboard must make the conversion from typed-in characters to binary sequences. It is also the job of an input/output unit to manage problems of timing. For example, the rates at which typists can press keys varies greatly. Also, it is wasteful for the computer to wait for all the necessary characters to be entered before beginning a processing sequence, and input/output devices can alleviate this problem. Similar timing problems arise when the computer has completed operations and then must display results. Most often this is done with printers and video display terminals. Many times the results are transmitted to another computer. At certain times during the operations of a computer there may be several different input and output transactions going on simultaneously. Some of the burden of managing this activity belongs tot he input/output units themselves, although overall direction is managed by the control unit. Each of the computer parts described so far--arithmetic and logic, memory, and input/output--is able to perform its own functions and communicate results. For these parts to work together effectively, however, it is necessary to have a control unit that coordinates the actions. To perform this job, a time frame of reference is established by the control unit. Generally, time within a computer is divided into moments whose length is determined by a basic rate at which the components in the control unit can react. This rate is fixed by a precision clock. Because all parts of the computer are not able to act at the same rate, longer periods of time are also developed, based on fractions of the fixed rate. By designing the computer so that every activity is related to the clock source, events become predictable, accountable, and easy to coordinate. The control unit initiates an operation by firs fetching an instruction from a list of instructions, called the program. The program is stored in the primary memory. Each instruction is an exact description of how the hardware units are to respond at a given moment in the time scheme of the computer. An illustration of a program is given by a recipe for making a cake. In addition to a list of ingredients, the recipe contains a step-by-step description of how to manipulate the ingredients in order to produce the cake. Similarly, the control unit of a computer is made to proceed through a list of directions describing how to manipulate certain data. A simple computer is able to perform only one task at a time. More complex computers have the ability to accomplish several tasks with one instruction. Regardless of the level of complexity, the control unit acts as an executive that provides each part of the computer with the information needed to perform its function, monitor its progress, and determine what to do next. The arithmetic and logic unit, control unit, and primary memory constitute what is usually called the \Tcentral processing unit\t. Computer Operation and Programming As has been said, all computers require a program, or list of instructions, to guide their activity. Sometimes the program is designed, or resides, within the hardware of the computer and cannot be changed without redesigning the hardware. More often, the program is entered as software into memory, and may be easily removed or altered. In fact, computers that do not have a hardware program usually have several programs available in the memory at the same time. Some of these programs are employed in the general operation of the computer, that is, they control the executive functions. These programs are part of what is referred to as the \Toperating system\t. Other programs are written by individual users for specific purposes, such as calculating the payroll for a company. These are called user programs (see \Tcomputer programming\t). Although an operating system is necessary for a computer to function at all, user programs accomplish the specific goals for which the computer is employed. Processor elements interact in a way that is largely determined by the hardware design, and they are controlled by operating systems, of which there may be many suitable kinds. The operation of secondary memory and a variety of input/output devices, however, introduces requirements that reduce the number of suitable operating systems. An operating system must be chosen so that it can manage the interactions of particular types of keyboards, modems, disk drives, printers, video output systems, and so on. Secondary memories that use magnetic tapes have information stored in sequence along the tape. In order to gain access to specific data, the tape must be moved and searched until the desired portion is found. This takes a great deal of time. Magnetic disks, although more expensive that tape, store information in concentric rings that can be searched more quickly by scanning in radial direction. These differences in access time and organization of contents require that different types of operating systems be applied to taper and disk systems. Similar considerations are made for the input/output units. The dominant factor in the design of operating systems, however, is the interaction with memory. Computer programs are referred to as software, and they reside in either read-only memory, ROM, which is usually unchangeable, or random-access memory, RAM, which can be altered more easily. Programs are written for a number of different levels within the computer and in a number of different programming languages (see \Lcomputer language\ls). A computer is capable of performing a particular function once given a signal, and there are often several ways in which it can perform the function. Therefore it must be further instructed to use a certain method. An enumeration of the functions of a computer, along with its methods for performing the functions, is called the instruction set of the computer. The instruction set can be viewed from the programmer's perspective, or the machine's perspective. For the machine, any instructions must be encoded in terms of ones and zeros. From the programmer's perspective, pages filled with ones and zeros are tedious and difficult to interpret. For this reason acronyms are assigned to each instruction in the set, making them more readable. As an example, adding two numbers that are stored in two registers might be given the label ADD a,B. The language of ones and zeros is called machine language. The language that uses labels to simplify matters is called assembly language. The process of converting assembly language into machine language is called assembling. Every program must eventually be converted into machine language in order to be executed. Assembly language, although much easier to deal with than machine language, is nevertheless difficult to use, especially in large and complex instruction sets. Furthermore, assembly-language programs cannot be used on different computers. Both of these problems are solved with the use of high-level languages. Instructions in high-level languages are given in terms that are both more readily understandable than those of assembly-language programs; and such high-level-language instructions are relatively independent of the particular computer on which they run. A high-level instruction can be broken down into several assembly-level instructions. When this is accomplished by a computer it is called compiling. A single high-level language will have a different \Tcompiler\t for each kind of computer on which it is used. Examples of common high-level languages are \TFORTRAN\t, \TBASIC\t, and Pascal. Successful programming requires that a task be broken down into methodical steps, or, in other word, and \Talgorithm\t, that can be understood not only by the computer, but also by other programmers. After a program is written, it must be checked thoroughly in order to remove errors. This process is often as time-consuming as the program writing. Difficulties with programs are of two types: logic errors and programming errors. The use of an incorrect series of steps in the the design of an algorithm is called a logic error. Incorrect use of the programming language is called a programming error. The process of locating these errors is called debugging. It is an arduous task, but it is crucial, because the ultimate performance of a computer is entirely dependent on the strict logic of its programs. Computer Applications The direct or indirect influence of computers is now nearly universal. Computers are used in applications as diverse as running a farm, diagnosing a disease, and designing, constructing, and launching a space vehicle. Science is a field in which computers have widely applied from the start. Because the development of computers has been largely the work of scientists, it is natural that a large body of computer applications serves the scientist. In order to solve scientific problems it is inevitable that researchers must deal with the language of science: mathematics. In attempting to understand more deeply complex natural phenomena, the scientist must use mathematical relationships that become increasingly difficult, as well as data that becomes more voluminous. It would be impossible to manage many of the studies of complex scientific phenomena without the aid of computers. Many scientific computer programs inevitably serve the entire population. An area in which this can be seen and which has experienced a steady growth in computer technology is farming. When computers are now used to analyze data concerning the feed intake, size, and food content of farm animals, the benefits eventually trickle down to many people, mainly because of efficiencies in production that result. The improved accuracy of weather forecasting is another example of more powerful computer programs. Not only do computers help forecast the weather, but by being able to analyze larger and larger amounts of data, meteorologists are able to add to the understanding of the science of weather. Computers also make possible the now familiar satellite pictures of weather systems. The technology required to place satellites in orbit is also afforded by large-scale computers. Of course, there is still a long way to go before weather is predicted with great accuracy, but it is expected that future generations of supercomputers, using techniques such as \Tparallel processing\t, will accomplish this goal. Businesses now use computers extensively and on a worldwide basis. A well-known example is the banking industry, which is almost entirely dependent on computers. Automated bank tellers are now ubiquitous and are little more than input-output devices for a bank's computer. They are also an example of the powerful system called \Tcomputer networking\t, in which computers, databases, and input-output devices are connected by means of cable, sometimes over great distances. The banking business is typical of many businesses today. The problems of record keeping and availability of information are similar in all types of businesses, and the computer is the perfect tool for dealing with such concerns. A relatively new area for computers is that of communications (see \Ttelecommunications\t). Communications consist of the flow and control of information. This is part of what a computer does as it manages the data moving among the elements within itself. By expanding the concept of a computer to include networks of input/output devices rather than a single, complete device, the result is a communications system. If the memory unit and arithmetic and logic unit of a computer are both relatively small but control many input/output devices, then the computer will act more like a message-handling system than a computational device (see \Telectronic mail\t). Gains in such areas as \Tvoice recognition\t, speech synthesis, and computer-networking software point to an important future for computers in communications. Small, powerful, and low-cost computers for the home have been made possible by progress in microelectronics (see \Tmicrocomputer\t). These desktop machines are now capable of performing many of the functions that larger computers are capable of performing. Initially used in home applications such as \Tvideo games\t and record keeping, by the late 1970s personal computers were proving useful in business and education as well. The development of more powerful \Lmicroprocessor\ls and advances in \Tcomputer networking\t in the mid- to late 1980s enhanced the power of personal computers so much that they are now widely used even in large corporations. An important application of personal computers is desktop publishing (see \Tpublishing, desktop\t). In this growing technology, software programs and inexpensive printers are used to produce text and graphics that are camera ready for publication. Sitting at a single terminal, a user can write and edit text, produce such graphics as charts or drawings, lay out text and graphical elements, and store the results in memory. The results can then be printed out or sent electronically to a typesetter. Desktop publishing allows individuals to produce high-quality printed matter inexpensively. Modern Concerns Researchers continually seek new ways to build better computers. The goals of their efforts are usually in one or more of the following areas: reducing costs, increasing processing speeds, increasing capabilities, and making computers easier to use. This last quality--ease of use--is commonly referred to as "friendliness." Sometimes improvements involve new devices; at other times they are brought about by new methods of integrating hardware or software elements. Memory, both primary and secondary, is one part of the computer that has received considerable attention over the years. Originally, the memory unit of any computer was an array of small iron rings that could each be magnetized with either of two polarities. The resulting process was slow, bulky, and expensive. Since then, semiconductor chips have become the mainstays of primary memories, with magnetic tapes and disks handling secondary-memory storage. Other phenomena continue to be experimented with as possible forms of memory technologies. These include magnetic bubble devices, electron tunneling devices, and \Lcompact disc\ls. In the area of magnetic storage, considerable effort has been applied to find ways of storing information more densely. Progress in semiconductor technologies continues, producing increased processing speeds and the fitting of more circuitry into less space. Very large-scale integration (VLSI), the integration of thousands of circuits on a silicon wafer, was achieved by the late 1980s. The products of advances in semiconductors give designers the freedom to build functions into hardware that previously had to be provided by software, and computers gain both speed and versatility. The use of optical means to store information is attractive primarily because the inherent high frequency of light implies that it should provide high densities. Unfortunately, the human eye is more tolerant of informational errors than is a computer. For this reason, as well as the difficulty of creating a material that can be written on repeatedly using laser light, the appearance of optical storage media was slow in the 1980s. Other laser-optical technologies are being developed, however, with optical fibers already used to transmit information in many networks. The use of optical methods in actual computer processing is still in the early stages of development but offers the hope of very fast and efficient computers for the future. One day computers may have, in addition to optical memories, optical processors (see \Toptical computing\t). Another area of experimentation is in the organization of computer parts. Most memory is organized so that a location is given an address. Content-addressable memory, \TCam\t, is a newer arrangement style, in which information is located according to its value content. With this method a computer can search for one item in a group in order to quickly find the whole group. As an example, if the text of this article were stored in a \TCam\t, the task of finding a certain sentence would be made easier if the computer could search for one particular phrase. Content-addressable memories are playing a role in attempts to model the brain's capabilities. Another change in computer organization--one that is now used in a growing percentage of computers--is the use of fewer instructions in order to maximize processing speeds. This is the basis of so-called reduced instruction set computers, referred to as RISC computers. A significant amount of interest exists in the field of \Tartificial intelligence\t. The technologies and benefits that will derive from this area of study will undoubtedly filter down to all areas of computer science. Much work in artificial-intelligence research involves programs built to perform in ways similar to the way tin which humans think. An example is the strategy employed in games programs, in which the computer keeps track of all possible responses, both winning and losing, and then builds a decision path that reinforces winning and deters losing. To an extent, this is an algorithm for learning. Despite certain advances in artificial intelligence, computers can still do no more than their programs instruct them to do. The greatest successes in this field have come with \Lexpert system\ls--huge, database systems that act like expert consultants in such fields as medicine and chemical analysis. Robert Swanson Bibliography: Biermann, A.W., Great Ideas in Computer Science (1990); Bonnet, Alain, et al., Expert Systems (1988); Cohen, Eli B., Introduction to Computers and Information Systems (1986); Davis, William S., Computing Fundamentals, 2d ed. (1989); De Sautels, Edovard J., Understanding and Using Computers (1989); Dewdney, A. K., The Armchair Universe (1987) and The Turing Omnibus (1989); Goldstine, Herman H., The Computer from Pascal to von Neumann (1972; repr. 1980); Hill, F. J., and Peterson, G. R., Digital Systems, 3d ed. (1987); Kidder, Tracy, The Soul of a New Machine (1981; repr. 1990); Kurzweil, Raymond, The Age of Intelligent Machines (1990); Long, L.E., Computers, 2d ed. (1990); Mims, Forrest M., Understanding Digital Computers (1978; repr. 1986); Walker, Roger S., Understanding Computer Science, 2d ed. (1984); Zaks, Rodnay, and Wolfe, Alexander, From Chips to Systems (1987).