# The Most Complex Machine

## Chapter Summaries

The Most Complex Machine: A Survey of Computers and Computing,
by David Eck.

MY VIEW OF COMPUTER SCIENCE is that it is largely a study of man-made complex systems. These systems are computers and the programs they run. The goal of computer science is to understand how those systems can be constructed, and to discover their abilities and limitations.

## Chapter Summaries

Chapter 1: "Introduction: What Computers Do"

This chapter introduces the idea of structured complexity, which refers to the way very complex systems can be built up, level by level, from simple parts. Three examples are given that will play a central role in the rest of the book: The data manipulated by computers form complex structures of information that are built from individual "bits". The computer itself is a complex physical structure built from simple electronic switches called transistors. The programs that the computer runs are built from very simple instructions in the "machine language" of the computer.

Chapter 2: "Teaching Silicon to Compute"

Chapters 2 and 3 show how a computer can be built and how it can execute machine language instructions. In Chapter 2 the question is: How can electronic circuits be built that can do things like add numbers and store information? This turns out to have a surprising connection to the branch of mathematics called Boolean algebra, which is the study of the "logical" values TRUE and FALSE and the rules for manipulating them. In fact, in a very real sense, the computer is a "logic machine."

Chapter 3: "Building A Computer"

Chapter 3 shows how the memory circuits and computational circuits from Chapter 2 can be combined into a computer. Although the model computer constructed in this chapter is fairly simple as computers go, it works in the same basic way as most real computers. At the heart of the computer is a "Control Circuit" that directs the operation of the computer as it reads program instructions from memory and carries them out. This program shows how to build a Control Circuit that will work with programs written in a specific "machine language." This machine language is covered in some detail.

Chapter 4: "Theoretical Computers"

The abilities and limitations of computers were studied before the first computer was ever built! This theoretical study of computation was started in the 1930s by Alan Turing and Alonzo Church, among others. Their work produced two surprising results, which are covered in this chapter: First of all, it turns out that all computers are equivalent in the problems they can solve, at least if we are willing to ignore differences in their speed and the amount of memory they have. This is called "Computational Universality." Second, there are some very natural problems that can never be solved by any computer. Chapter 4 also covers Turing Machines, abstract computing devices invented and studied by Alan Turing as part of his investigation of the nature of computation.

Chapter 5: "Real Computers"

Whereas previous chapters dealt with theoretical machines and simple model computers, this chapter turns finally to real computers. It includes a quick history of computing, including the Analytical Engine and the development of the first electronic, stored-program, general-purpose computers. The second section of the chapter explains how today's real computers work, with peripheral devices, busses, operating systems, and user interfaces. A final section looks briefly at the social impact of computing.

Chapter 6: "Programming"

Chapters 6 through 8 are an introduction to programming. The first two chapters on programming use a made-up language called xTurtle to illustrate the ideas that are discussed. xTurtle includes "turtle graphics" commands for drawing pictures on the computer's screen. Chapter 6 covers the most basic ideas: built-in subroutines, variables, assignment statements, input-output, loops and decisions. As always, the emphasis is on building up complex structures--programs in this case--from simple parts. There is also some emphasis on thinking about programs. Preconditions and postconditions are introduced as a way of thinking about programs.

Chapter 7: "Subroutines and Recursion"

Subroutines are a major tool for constructing programs. They are black boxes that chunk together the instructions for performing some task. The first section of this chapter covers subroutines in xTurtle. The second section turns to the question of program design and introduces the more general idea of "module." The phases of software life cycle--analysis, design, coding, testing, and maintenance---are discussed. The final section of the chapter introduces recursion and gives some examples of pictures that can be drawn with recursive xTurtle subroutines.

Chapter 8: "Real Programming Languages"

Many real programming languages--those used for serious programming--are similar to the xTurtle language in having variables, loops, subroutines, and so on. But there is one essential aspect of computing that is not seen in xTurtle: the ability to create data structures. One of the major themes in the development of programming languages has been the increasing respect for representing different types of data. This chapter looks at data structures and modules, using the language Pascal as its principle example. The chapter also includes a brief general history of programming languages and a section on non-traditional languages such as LISP and Prolog.

Chapter 9: "Applications"

This chapter starts with a survey of the most common ways in which individuals use their personal computers: word-processing, graphics, spreadsheets, databases and communication. It then turns to larger-scale application including computer modeling (for example, of weather) and optimization (for example, linear programming). None of these are covered in great detail; the idea is to indicate the range of computer applications. An extended "postscript" to this chapter discusses analysis of algorithms, a branch of theoretical computer science that deals with the practical questions of running time and memory requirements of programs. This section also discusses the famous "P=NP" problem.

Chapter 10: "Cooperating Computers"

The standard computer, as presented in the rest of the text, has a single processor that can do only one thing at a time. That processor can work on several different "processes" using a technique called multitasking where the processor rapidly shifts its attention from one process to another. This chapter looks at what can happen when you actually have several processors working simultaneously. This can happen if there are several processors in one computer (called multiprocessing) or when several computers are connected together to form a network (called distributed processing). This chapter looks at programming for such "parallel processing", including the problem of data that has to be shared by several processors. The chapter also looks at networking in general and discusses several network protocols.

Chapter 11: "Graphics"

There are two types of programs for creating images on a computer: painting programs and drawing programs. This chapter concentrates on the latter, where a data structure is used to represent a "model" of a scene. Models are assembled from simple components using "geometric transformations" that can resize, move and rotate the components into the desired position in a scene. Once the geometric model is created, object attributes such as color and surface texture can be added. Finally, the scene is "rendered." This involves the creation of an image that shows what the scene would look like from a given point of view when lit by specified light sources.

Chapter 12: "Artificial Intelligence"

This chapter ends the book on a more philosophical note. The chapter starts with a survey of traditional artificial intelligence, based on symbol manipulation. The second section outlines the heated philosophical debate about AI that has gone on from the very beginning of the subject. A final section looks at recent trends in AI that move away from the traditional symbolic approach: neural nets, artificial life, and the genetic algorithm.