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.

Foundations of Mathematics

Algorithms

Programming Practice

Miscellany

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:
  1. An object-oriented derivative of Pascal, designed to be as simple as possible, but no simpler.
  2. 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.