A reading List in Mathematics
As faculty members look back over their lives, one thing
that strikes us is how many books that have really mattered to us, or that
we use every day (or every week, or month, or year) are not books we were
required to buy in any class. We've grown intellectually, and we use as
tools, any number of things learned from books we found in the library,
books we happened on in bookstores, books our friends and colleagues and
students recommended.
Additionally, as we look back on our student days,
we realize how much of importance we learned by our extra-curricular reading.
This list represents a small attempt to capture
and share some of the books and ideas and tools that have mattered to us.
Think of it as a summer reading list, or as a list of books to read sitting
on the Heart between classes, or when you're looking for excitement.
The list reflects our interests and our lives; it omits much that is valuable,
and it probably includes some things that helped for one of us, but that
the others of us have not felt a need to explore. Read the ones that interest
you, and find others to add to this list. Do send us comments!
Number Theory
Archimedes described mathematics as "The queen of the sciences;" Gauss added that number theory is the queen of mathematics. Number theory is the study of the integers, including the distrubution and properties of primes, the search for integer solutions of polynomial equations with integer coefficients, and questions like Fermat's Last Theorem. It stands at the beginnings of mathematics, and it has also been an area of deep interest for many of the best mathematicians of the past 4 centuries.
-
Carl Friedrich Gauss, Disquisitiones Arithmeticae. After 200 years, this book remains a superb introduction to number theory. Available in English only for the past 30 years, the Disquisitiones is a chance to learn both mathematics and how mathematics is done by watching the greatest mathematician in history work.
- Joe Roberts
-
Harold Davenport, The Higher Arithmetic. A short and elegant book that moves quickly but gets you deeply into number theory in a few cheap pages.
- G. H. Hardy and E. M. Wright, The Theory of Numbers. The one book everyone should read on number theory. Hardy and Wright do the basics, but also show you the power of Minkowski's geometry of numbers and do some deeper analytic things like proving the Prime Number Theorem (that the size of the nth prime is roughly n/ln(n)).
- Tom Apostol, Analytic Number Theory Incredibly, the distribution of prime numbers is most effectively investigated by looking at the integrals along vertical lines in the complex plane of functions from the complex numbers to the complex numbers. Apostol, also the author of one of the best introductions to calculus, explains how all this works. The subject is demanding, but Apsotol is an excellent expositor writing for an undergraduate audience, and he gives you all the details.
- H. M. Edwards, Riemann's Zeta Function. A wonderful historical introduction to analytic number theory, starting with Riemann's paper in which the Riemann Hypothesis is stated, progressing through the proof of the Prime Number Theorem by Hadamard and de la Vallee-Poussin, and ending with a glimpse of late 20th century work on other zeta functions. This is a great way to learn some very deep mathematics. Like Apostol, Edwards is a careful expositor who doesn't skimp on details; like Apostol's, Edwards' subject matter is demanding.
- Eric Bach and Jeffrey Shallit, Algorithmic Number Theory. An up-to-date and encyclopedic work on how to compute number theoretic functions. The first volume discusses those functions for which effective computational strategies are known. I'm looking forward to the second volume, which will address questions largely related to factorizarion and proving primality for which there are not yet efficient algorithms.
Foundations of Mathematics
-
Wilder, A readable overview of the issues and the major answers to the question of what mathematics is. Both Tekla and Tim were inspired by this book as undergraduates.
- Benacerraf and Putnam, Readings in the Philosophy of Mathematics. A balanced if somewhat dated set of excerpts from the principal figures in the debates on foundations at the beginning of the 20th century.
- Arend Heyting, Intuitionism, An Introduction. A Socratic dialogue and mathematical discussion of intuitionism, an unusual approach to foundations of mathematics with a
-
Brian Kernighan and Dennis Ritchie, The C Programming Language.
The one slim book on C you need. The indispensible reference by the authors
of the language. By using as examples the source code for bits of C's own
library, K&R also begin one on the way to using C for system programming,
the original purpose of the language.
-
Bjarne Stroustrup, The C++ Programming Language. Fatter and less
indispensible than K&R, but still a very interesting book on an important
language by its designer.
-
Bertrand Meyer, Object-Oriented Software Construction. By the designer
of the Eiffel language, a modern OO language taking programming by contract
seriously. Meyer writes deeply and interestingly about not just language
design, but the whole software development process, managing complexity,
and maintaining reliability.
-
Moessenboeck, Object Oriented Programming in Oberon-2. A thin but
deep book on an interesting language designed to be small and simple and
to highlight the minimum additions required to make a procedural language
OO. A good book to read to see what objects let you do that you can't do
in C.
-
Samuel Kamin, Programming Languages, An Interpreter-Based Approach.A
book with a rather dated set of languages, but an interesting hands-on
approach. Understand Lisp, Scheme, APL, Prolog, Smalltalk, and others by
inplementing interpreters for subsets of all these languages.
-
Niklaus Wirth, Compiler Construction. Want to learn in 138 pages
everything you need to know to write a compiler? Like to learn it using
an amazingly compact and fast language designed by the author of this book,
who also brought you Pascal and Modula? Wirth is one of the real masters
of CS, and this book is well worth serious study.
-
Andrew Appel, Modern Compiler Implementation in [Java, C, ML]. The
standard modern book on the subtle and beautiful process of moving from
code to computing.
Algorithms
-
Donald Knuth, The Art of Computer Programming. This 3-volume work
(Fundamental Algorithms, Seminumerical Algorithms, Sorting & Searching)
is the Bible of algorithms. Knuth's cleverness and breadth of knowledge
can hardly be overstated, and his books are of as much value to mathematicians
as to computer scientists. Hard work, but enormously valuable.
-
Robert Sedgewick, Algorithms in [C, C++, Java, Modula-3]. The standard
1-volume place to look up the basics. Your coding style should be better
than Sedgewick's though.
-
Herbert Wilf, Analysis of Algorithms. A succinct and elegant mathematical
treatment, and free from his web site.
-
A. V. Aho, J. E. Hopcroft, and J. D. Ullman, The Design and Analysis
of Computer Algorithms. A good, classic source.
-
Steven Skiena, The Algorithm Design Manual. An algorithms book based
on design, not analysis. Great "war stories", too.
-
Richard Zippel, Effective Polynomial Computation. Ever wonder how
Maple factors polynomials? Here's a place to find out.
-
Bach and Shallit, Algorithmic Number Theory. A modern work on primes,
factorization, and everything else to do with the integers. Great references,
too.
-
Thomas Standish, Data Structure Techniques. 25 years old, but still
has some good things to teach.
Programming Practice
-
Brian Kernighan and Rob Pike, The Practice of Programming. A collection
of practical advice and programming vignettes fromthe folks who brought
you Unix and C.
-
Jon Bentley, Programming Pearls, More Programming Pearls. Two short
books of success stories aimed at encouraging good practice and cleverness.
Great bathroom reading.
-
Fred Brooks, The Mythical Man-Month. Brooks was a designer and manager
of the IBM OS/360 project, who first discovered that when a programming
project is running behind schedule, managers should speed up the work by
shrinking the development team.
Miscellany
-
Foreman Acton, Numerical Methods That Work. A friendly and useful
introduction to numerical analysis.
-
Michael Resnik, Turtles, Termites and Traffic Jams. A work by a
guy at MIT's Media Lab on how systems with large numbers of entities self-organize.
Some great hacking, too.
Languages and Environments
Scheme
This is one of the most widely used functional languages. Scheme
is a flavor of Lisp, but with a much reduced number of primitives. At the
same time, Scheme takes functions very seriously. Functions can take functions
as arguments and return functions as values, for instance. Iteration is
possible, but deprecated; recursion should be used instead. Used by Abelson
and Sussman, Scheme can be a tremendously eye-opening language.
ML
A typed functional language with a more normal syntax than
Scheme. For those who like type safety and who think 3+5 looks more natural
than (+ 3 5).
Haskell, Miranda, Concurrent Clean
ML derivatives featuring call-by-need semantics (lazy evaluation).
This lets you do amazing things like writing
intsfrom n = n : intsfrom n+1;
ints = intsfrom 1;
to mean that the integers starting at n are a list whose first element
is n and the rest of which is the list consisting of the integers starting
at n+1. The integers are the intsfrom 1. Think about what sorts of things
infinite data structures might let you do.
Oberon
A product of Niklaus Wirth, who designed Pascal and Modula
as well, Oberon is two things:
-
An object-oriented derivative of Pascal, designed to be as simple as possible,
but no simpler.
-
An operating system with the same design philosophy.
By working from scratch, Wirth and his colleagues were able to build a
complete OS with compiler, graphics tools, networking etc. that fits with
it source on a single floppy, and that was built by 2 people working part
time for a couple years. A small and simpel system is both reliable and
fast: on my aging Powerbook, Obron can compile 4000 lines of code in 4
modules in about half a second. In a series of wonderful books, Wirth,
Gutknecht, and Reiser teach one the complete internals of the language
and OS. I wish this system were our future.
Smalltalk
The original OO language, and still a serious contender. Smalltalk
is a development environment as well as a language, built around the notion
that everything should be an object. Want a language that is so OO that
addition is viewed as sending a + message with some argument to an integer
object, or in which the class Class is an object? Would you like to be
able to see and edit the full source for a language and system while you
work, so that you can, say, modify the language itself by adding type protection
while the language is running? Smalltalk is one of those wonderful systems
built around a single idea carried through consistently. An open-source
Smalltalk, Squeak, is written in itself and runs bit-identical code in
virtual machines on every computer (or even PDA) you can imagine.
Prolog
Suppose the only thing you could do with a computer was to
build parse trees for context-free grammars. What would life be like? A lot
like programming in Prolog, a logic-based language that also has
connections to databases. Prolog is the absolute simplest language to use
to build a parser, since the CFG itself is a Prolog program. One of the
most distinctive of the standard languages, Prolog is definitely worth a
visit.
Lisp
What would life be like if the only thing you could do with
computers was to manipulate lists? A lot like programming in Lisp. The
earliest language other than Fortran, Lisp is still very much alive. (Ever
use Emacs?) The interpreted environment and large libraries can make Lisp a
very productive language, and it's one of those things anybody should have
a nodding acquaintance with.