Some Things Worth Reading

General Software Development

Andrew Hunt and David Thomas, The Pragmatic Programmer, 2000
This very readable book spells out the philosophy and steps that you should follow if you are to take pride in your code and in your career as a software developer.

Brian W. Kernighan and Rob Pike, The Practice of Programming, 1999
Much more technical than The Pragmatic Programmer, but also covers how to be a good programmer.

Martin Fowler, Refactoring: Improving the Design of Existing Code, 1999
This book lays out design patters for refactoring, i.e., rewriting code to improve its cleanliness/performance without changing its exposed API. While the examples are all in Java, the principles presented are generally applicable. As is the case with all books by Fowler, this one is very well written.

Martin Fowler, UML Distilled: A Brief Guide to the Standard Object Modeling Language, 1999
Like it or not, eventually you will need to learn something about the Unified Modeling Language (UML), and this book gives a good, brief, readable overview.

Robert Sedgewick, Algorithms in C++, 1992
A good introduction to algorithms. The author has written a Java version of this book more recently.

Object-Oriented Software Development and Design Patterns

Arthur J. Riel, Object-Oriented Design Heuristics, 1996
A great book on object-oriented design which distills the subject into 50-60 easy-to-understand "heuristics".

General Artificial Intelligence

Patrick Henry Winston, Artificial Intelligence, 1992
A good survey introduction to artificial intelligence.

Neural Networks

R. Beal and T. Jackson, Neural Computing: An Introduction, 1990
A good general introduction to neural networks, with step-by-step algorithms for the various network types. However, it does have a fair number of typos.

David M. Skapura, Building Neural Networks, 1996
A more detailed general introduction, also with some step-by-step algorithms. Includes applications.

Simon Haykin, Neural Networks: A Comprehensive Foundation, 1998
A very comprehensive and also very readable textbook on neural networks. While it is more mathematically rigorous than many other books, Haykin's book is probably the best source (short of the technical literature) for detailed information on neural networks.

Timothy Masters, Practical Neural Network Recipes in C++, 1993
A useful source of practical insights into applying neural networks to time-series prediction and other problems. In this and his other books (Advanced Algorithms for Neural Networks, Neural, Novel & Hybrid Algorithms for Time Series Prediction), Masters presents an approach to neural networks different from most other practitioners.

Genetic Algorithms

Melanie Mitchell, An Introduction to Genetic Algorithms, 1996
A very readable introduction to both practical and theoretical aspects of genetic algorithms.

David E. Goldberg, Genetic Algorithms: In Search, Optimization & Machine Learning, 1989.
A classic in the field, Goldberg's book is another good introduction to the field. It includes Pascal code.

John H. Holland, Adaptation in Natural and Artificial Systems, 1992
Originally published in 1975, this is the groundbreaking work in genetic algorithms, but not an easy read.

John R. Koza, Genetic Programming, 1992
A big book on genetic programming, including code in Lisp.

Updated January 8, 2001