<HTML>
<HEAD>
<TITLE>Computer Science Logo Style vol 3: Bibliography</TITLE>
</HEAD>
<BODY>
<CITE>Computer Science Logo Style</CITE> volume 3:
<CITE>Beyond Programming</CITE> 2/e Copyright (C) 1997 MIT
<H1>Bibliography</H1>
<TABLE width="100%"><TR><TD>
<IMG SRC="../csls3.jpg" ALT="cover photo">
<TD><TABLE>
<TR><TD align="right"><CITE><A HREF="http://www.cs.berkeley.edu/~bh/">Brian
Harvey</A><BR>University of California, Berkeley</CITE>
<TR><TD align="right"><BR>
<TR><TD align="right"><A HREF="../pdf/v3ch07.pdf">Download PDF version</A>
<TR><TD align="right"><A HREF="../v3-toc2.html">Back to Table of Contents</A>
<TR><TD align="right"><A HREF="../v3ch6/v3ch6.html"><STRONG>BACK</STRONG></A>
chapter thread <A HREF="permissions.html"><STRONG>NEXT</STRONG></A>
<TR><TD align="right"><A HREF="https://mitpress.mit.edu/books/computer-science-logo-style-second-edition-volume-3">MIT
Press web page for <CITE>Computer Science Logo Style</CITE></A>
</TABLE></TABLE>
<HR>
<P>This book is a little like the previews of coming attractions at the movies;
it's meant to whet your appetite in several directions, without giving you
the complete story about anything. To find out more, you'll have to consult
more specialized books on each topic.
<P>There are a lot of books on computer programming and computer science,
and whichever I chose to list here would be out of date by the time
you read this. Instead of trying to give current references in every
area, in this edition I'm listing only the few most important and
timeless books, plus an indication of the sources I used for each
chapter.
<P>Computer science is a fast-changing field; if you want to know what the
current hot issues are, you have to read the journals. The way to start is
to join the Association for Computing Machinery, 1515 Broadway, New
York, NY 10036. If you are a full-time student you are eligible for a
special rate for dues, which as I write this is 25 per year. (But you
should write for a membership application with the current rates.) The
Association publishes about 20 monthly or quarterly periodicals, plus the
newsletters of about 40 Special Interest Groups in particular fields.
<P><H2>Read These!</H2>
<P>
If you read no other books about computer science, you must read these two.
One is an introductory text for college computer science students; the other
is intended for a nonspecialist audience.
<P>Abelson, Harold, and Gerald Jay Sussman with
Julie Sussman,
<EM>Structure and Interpretation of Computer Programs,</EM> MIT Press,
Second Edition, 1996.
<P><BLOCKQUOTE>
The introductory computer science text at MIT, this book uses Lisp as the
vehicle for an intense study of everything from data structures to machine
architecture. Although it's not a book about artificial intelligence as
such, this is the definitive presentation of the artificial intelligence
view of what computer science in general is about, and the best computer
science book ever written.
<P></BLOCKQUOTE>
<P>Hofstadter, Douglas R., <EM>Godel, Escher, Bach: an Eternal
Golden Braid,</EM> Basic Books, 1979.
<P><BLOCKQUOTE>
This book won the Pulitzer Prize for its success in explaining to readers
who aren't computer scientists some of the deepest ideas of computer
science, and it makes a strong case for the view that those ideas also have
a lot to teach us about human intelligence.
<P></BLOCKQUOTE>
<P><H2>Chapter 1: Automata Theory</H2>
<P>The reference I used in thinking about this chapter was
<P>Minsky, Marvin, <EM>Computation: Finite and Infinite
Machines,</EM> Prentice-Hall, 1967.
<P><BLOCKQUOTE>
Part of the interest of this particular text is that its author is a leading
figure in artificial intelligence research, and so the question of whether
the insights of automata theory apply also to human intelligence is always
visible as a motivating force in the presentation of the theory. Minsky's
bibliography will refer you to the original papers by Turing, Kleene,
Church, and so on as well as some left-field references to biological
information processing from people like Lettvin and McCulloch.
<P></BLOCKQUOTE>
<P>
<P><H2>Chapter 2: Discrete Mathematics</H2>
<P>This chapter touches on several topics. An overall introduction for
computer scientists is
<P>Liu, Chung Laung, <EM>Elements of Discrete Mathematics,</EM>
McGraw-Hill, Second Edition, 1985.
<P><BLOCKQUOTE>
This book requires no advanced mathematical background, but it does require
that the reader feel comfortable with mathematical notation and the notion
of formal proof. The topics include both purely mathematical ones, like set
theory, combinatorics, and modern algebra, and related computer science ones
like computability, formal languages, automata theory, analysis of
algorithms, and recursion. This list is not unlike the one in the book
you're reading now, and in fact Professor Liu expresses a goal similar to
mine: to show computer science undergraduates the relevance of mathematics
to their work. The difference is that I use actual programs to illustrate
the ideas whenever possible, whereas his is a "straight" math book. (Of
course another difference is that he treats all these topics in much more
depth. But don't be scared away; he starts simply.)
<P></BLOCKQUOTE>
<P>On the topic of mathematical logic, there is a range of books that vary in
accessibility. Among the most pleasant are
<P>
<P>Smullyan, Raymond, <EM>What Is the Name of This Book?</EM> Prentice-Hall, 1978
<P>--, <EM>The Lady or the Tiger?</EM> Knopf, 1982
<P>--, <EM>5000 B.C. and Other Philosophical Fantasies,</EM> St. Martin's, 1984
<P>--, <EM>Alice in Puzzle-Land,</EM> Penguin, 1984.
<P>
<P><BLOCKQUOTE>
These are books of puzzles based on logic, but they go beyond the simple
propositional inference puzzles like the one in the text. Smullyan starts
with some of the classic puzzle categories, like the Liars and Truth-Tellers
puzzle, and builds up to an exposition in puzzle form of topics like
self-reference, modal logic, and Godel's Theorem.
<P></BLOCKQUOTE>
<P>"Logic programming" is the use of mathematical logic formalisms as a
programming language. It is also called "declarative programming" because
instead of issuing commands to the computer, the programmer makes statements
about things known to be true. The algorithm by which the programming
system makes inferences from these statements is not explicitly provided by
the programmer, but is built into the language. The most widely known
logic programming language, although not the only one, is Prolog. An
accessible introductory text is
<P>Ennals, Richard, <EM>Beginning Micro-Prolog,</EM> Harper & Row,
Second Edition, 1984.
<P><BLOCKQUOTE>
I list this book here because it's a Prolog text and therefore relevant
to mathematical logic, but for me the main interest of the book is that
it argues for the use of Prolog in teaching kids, as an alternative to Logo.
The book gives examples of logic programming at work in various curriculum
areas.
<P></BLOCKQUOTE>
<P><H2>Chapter 3: Algorithms and Data Structures</H2>
<P>To a software engineer, the issues in this chapter are among the central ones in
computer science. That's not my own way of thinking, so it's possible that
my presentation doesn't give the field all the pizazz that an enthusiast
would manage. To compensate for that, you should read
<P>Bentley, Jon, <EM>Programming Pearls,</EM> Addison-Wesley, 1986.
<P><BLOCKQUOTE>
This is a collection of monthly articles written by Bentley for the
<EM>Communications</EM> of the Association for Computing Machinery. It
requires virtually no formal mathematics and is extremely readable.
If the book has a moral, it's "Think first, program later." It makes
its case with a number of true-to-life examples of projects in which orders
of magnitude were saved in the execution time of a program by rethinking its
fundamental structure.
<P></BLOCKQUOTE>
<P>
<P><H2>Chapter 4: Programming Language Design</H2>
<P>There are textbooks in "comparative programming languages," but I'm going
to stick to the strategy of the chapter by using Pascal as the example.
<EM>Structure and Interpretation of Computer Programs,</EM> one of my
must-reads, will be useful as a contrast here, giving the Lisp point of view.
<P>Jensen, Kathleen, and Niklaus Wirth, <EM>
Pascal User Manual and Report,</EM> Springer-Verlag, Third Edition, 1985.
<P><BLOCKQUOTE>
This is the official report of the international committee responsible for
the design of the language. The book has two parts, a reference manual and
the committee report itself. The latter includes some explicit discussion
of the design decisions in the language.
<P></BLOCKQUOTE>
<P><H2>Chapter 5: Programming Language Implementation</H2>
<P>I really didn't have a reference for this chapter; I just sort of
forged ahead on my own! But here's the book I <EM>should</EM> have
read first:
<P>Friedman, Daniel P., Mitchell Wand, and
Christopher T. Haynes, <EM>Essentials of Programming Languages,</EM>
MIT Press, 1992.
<P><BLOCKQUOTE>
This book uses the Scheme dialect of Lisp as the basis for a
study of programming language interpreters. It's harder reading
than most of the books in this bibliography, but it encourages the
reader to think very deeply about how programming languages work.
<P></BLOCKQUOTE>
<P><H2>Chapter 6: Artificial Intelligence</H2>
<P>I'll list two references here; one on language understanding in
general and one that contains a paper about the Student program
specifically.
<P>Winograd, Terry, <EM>Language as a Cognitive Process, Volume 1:
Syntax,</EM> Addison-Wesley, 1983.
<P><BLOCKQUOTE>
A planned second volume on semantics was not published. This is a
technically meaty book, but considering its depth it is quite readable.
The book strikes a good balance among technical programming issues,
psychological issues, and the ideas of mainstream linguistics. It includes
an extensive bibliography. When I attended Terry's course at Stanford in
which he first presented the material that became this book, it was the
first time I experienced a course that ended with a standing ovation for the
instructor. The book shows the same clarity of explanation and the same
enthusiasm.
<P></BLOCKQUOTE>
<P>Minsky, Marvin L., <EM>Semantic Information Processing,</EM> MIT
Press, 1969.
<P><BLOCKQUOTE>
This is a collection of early research reports. I include it here because
one of its chapters is a paper by Bobrow on STUDENT, and you won't be able
to find the more complete description in Bobrow's unpublished thesis.
Other chapters describe similar microworld-strategy projects of the same
vintage.
<P></BLOCKQUOTE>
<P><H2>Computers and People</H2>
<P>Last but far from least, some of the most fascinating reading connected with
computer science is found outside of the technical literature, in the
reactions of psychologists, philosophers, and sociologists to the computer
as a social force. You owe it to yourself to understand the human context
of your work; you owe it to everyone else to be strongly aware of the
social implications of what you do.
<P>Turkle, Sherry, <EM>The Second Self: Computers and the Human
Spirit,</EM> Simon and Schuster, 1984.
<P><BLOCKQUOTE>
A sociologist's view of the computer culture, this book explores both the
psychology of computer experts and the ways in which a computer-rich
environment has changed the thinking of non-experts not only about
technology but about what it means to be human.
<P></BLOCKQUOTE>
<P>Weizenbaum, Joseph, <EM>Computer Power and Human Reason: From
Judgment to Calculation,</EM> W. H. Freeman, 1976.
<P><BLOCKQUOTE>
Weizenbaum is a computer scientist, and this book is in part a technical
argument about the limitations of what computers can do. But it is more
importantly a call to computer scientists to take responsibility for the
uses to which their inventions are put. Weizenbaum argues that there are
things we <EM>shouldn't</EM> do with computers, even if we <EM>can</EM> learn
how to overcome the technical obstacles. Computer-based weapons of war are
an obvious example, but Weizenbaum is also worried about things like
automated psychotherapy, which was just a daydream when the book appeared
but has since become a reality to a limited extent. Many computer
scientists find this book offensive, and it is certainly possible to find
flaws in the details. But the critics rarely present an alternative with
an equally strong social conscience.
<P></BLOCKQUOTE>
<P>Dreyfus, Hubert L., <EM>What Computers Still Can't Do: A
Critique of Artificial Reason,</EM> MIT Press, 1992.
<P><BLOCKQUOTE>
Dreyfus is a philosopher who uses the phenomenological ideas of Heidegger
and others to suggest a fundamental flaw in the assumptions AI researchers
make about human intelligence. To try to sum it up in one sentence, the
sort of thinking that people do in solving a puzzle is very different from
the much more profound intelligence we use in carrying out our more customary
activities. AI programs mimic the former but not the latter. This is a
revision of an earlier book, taking into account more recent developments
in AI research.
<P></BLOCKQUOTE>
<P>Weinberg, Gerald M., <EM>The Psychology of Computer
Programming,</EM>
Van Nostrand Reinholt, 1971.
<P><BLOCKQUOTE>
This book studies programming as a social activity, programming as an
individual activity, and the programming environment. In my opinion, its
main contribution is the idea of "egoless programming," which means more
or less that when your friend finds that impossible bug in your program for
you, you should feel happy rather than threatened. Weinberg offers several
good ideas for how to act as part of a programming community. On the other
hand, I'm less enthusiastic about his manager's-eye view of the programmer
as a cog in the machine, rather than as a creative artist. But overall I
think this book is well worth reading; it's also entertainingly written.
<P></BLOCKQUOTE>
<P>
<P><A HREF="../v3-toc2.html">(back to Table of Contents)</A>
<P><A HREF="../v3ch6/v3ch6.html"><STRONG>BACK</STRONG></A>
chapter thread <A HREF="permissions.html"><STRONG>NEXT</STRONG></A>
<P>
<ADDRESS>
<A HREF="../index.html">Brian Harvey</A>,
<CODE>bh@cs.berkeley.edu</CODE>
</ADDRESS>
</BODY>
</HTML>