Preface (written for the First Edition) Read this,I pray thee ISALAH 29:12 This book tells a story.The story concerns the concepts,ideas,methods,and results fundamental to computer science.It is not specifically about computer technology, nor is it about computer programming,though obviously it is heavily influenced by both. The book is intended to fill a rather disturbing gap in the literature related to the computer revolution.Scores of excellent books can be found on computers themselves,with details of their structure,workings,and operation.There are also numerous books about the act of writing programs for computers in any of a growing number of languages.These books come at a wide range of levels,some aimed at people with no computer-related background at all,and some aimed at the most computer-literate professionals.In addition,there are many books on subjects pe- ripheral to the technology,such as the social and legal aspects of the revolution, as well as books describing the relevance of computers to a variety of application areas.All this comes as no surprise.People are curious about computers,and want to learn how to put them to use.They are typically interested in specific kinds of computers,and often for specific purposes,too. Then there are textbooks.Indeed,computer science is a fast-growing academic discipline,with ever-larger numbers of potential students knocking at the doors of admission offices.Well-established academic disciplines have a habit of yielding excellent textbooks,and computer science is no exception.Over the years many comprehensive and clearly written textbooks have appeared,containing detailed technical accounts of the subjects deemed appropriate to students of computer sci- ence.However,despite the dizzying speed with which some of the technological innovations become obsolete and are replaced by new ones,the fundamentals of the science of computation,and hence many of the basic concepts that are considered important in a computer science curriculum,change slowly,if at all.Of course,new technologies and new languages require revisions in scientific emphasis,which are eventually reflected in the scientific literature.However,by and large,there is almostP1: GIG PE002-FM PE002-Harel PE002-Harel-FM-v1.cls March 19, 2004 19:35 Preface (written for the First Edition) Read this, I pray thee ISAIAH 29: 12 This book tells a story. The story concerns the concepts, ideas, methods, and results fundamental to computer science. It is not specifically about computer technology, nor is it about computer programming, though obviously it is heavily influenced by both. The book is intended to fill a rather disturbing gap in the literature related to the computer revolution. Scores of excellent books can be found on computers themselves, with details of their structure, workings, and operation. There are also numerous books about the act of writing programs for computers in any of a growing number of languages. These books come at a wide range of levels, some aimed at people with no computer-related background at all, and some aimed at the most computer-literate professionals. In addition, there are many books on subjects peripheral to the technology, such as the social and legal aspects of the revolution, as well as books describing the relevance of computers to a variety of application areas. All this comes as no surprise. People are curious about computers, and want to learn how to put them to use. They are typically interested in specific kinds of computers, and often for specific purposes, too. Then there are textbooks. Indeed, computer science is a fast-growing academic discipline, with ever-larger numbers of potential students knocking at the doors of admission offices. Well-established academic disciplines have a habit of yielding excellent textbooks, and computer science is no exception. Over the years many comprehensive and clearly written textbooks have appeared, containing detailed technical accounts of the subjects deemed appropriate to students of computer science. However, despite the dizzying speed with which some of the technological innovations become obsolete and are replaced by new ones, the fundamentals of the science of computation, and hence many of the basic concepts that are considered important in a computer science curriculum, change slowly, if at all. Of course, new technologies and new languages require revisions in scientific emphasis, which are eventually reflected in the scientific literature. However, by and large, there is almost xi