Recommended Textbooks

There are no required textbooks. We recommend two books:

Buy at Amazon Liskov, Barbara, and John Guttag. Program Development in Java: Abstraction, Specification, and Object-Oriented Design. Reading, MA: Addison-Wesley, 2000. ISBN: 0201657686.

Buy at Amazon Bloch, Joshua. Effective Java: Programming Language Guide. Reading, MA: Addison-Wesley, 2001. ISBN: 0201310058.

The Liskov book parallels the course material closely; it's a good book for background reading. The Bloch book explains, in about 60 short items, some key ideas in program style, as well as some subtleties of Java; it's perhaps better appreciated when you have some familiarity with Java and want to delve deeper.

Software Engineering References

Some other excellent books you should consider for your reference library on software engineering are:

Buy at Amazon Gamma, Erich, Richard Helm, Ralph Johnson, and John Vlissides. Design Patterns: Elements of Reusable Object-Oriented Software. Reading, MA: Addison-Wesley, 1995. ISBN: 0201633612.
The seminal book on design patterns, usually referred to as the "Gang of Four book". Organized as a catalog.

Buy at Amazon Fowler, Martin. Analysis Patterns: Reusable Object Models. Reading, MA: Addison-Wesley Professional, 1996. ISBN: 0201895420.
A book on object models of problems, organized in the style of the "Gang of Four book". Notation differs slightly from the notation we'll use, but that shouldn't be a major obstacle.

Buy at Amazon ———. Refactoring: Improving the Design of Existing Code. Reading, MA: Addison-Wesley, 1999. ISBN: 0201485672.
A book on techniques for restructuring code to make it more readable, extensible, and maintainable without changing its meaning. Particularly helpful for those coming from a non-object-oriented background. Examples are presented in Java.

Buy at Amazon Jackson, Michael. Software Requirements and Specifications. Reading, MA: Addison-Wesley and ACM Press, 1995. ISBN: 0201877120.
A collection of short and entertaining essays on software development. One of the only books to explain clearly the difference between 'requirements' and 'specifications'.

Learning Java

The course is not about Java, but you will be need to learn Java in the first week or so. Some books you might find helpful are:

Buy at Amazon Horton, Ivor. Beginning Java 2: JDK 5 Edition. New York, NY: Wiley Publishing, 2004. ISBN: 0764568744.

Buy at Amazon Flanagan, David, and Brett McLaughlin. Java 1.5 Tiger: A Developer's Notebook. Cambridge, MA: O'Reilly Publishing, 2004. ISBN: 0596007388.
This book can also be read online on Safari through MIT Libraries (requires certificates).

The Flanagan and McLaughlin book should suit those who already know some Java (we will be using Java 5 this term). Those who don't know Java are better off with the Horton book, which is a self-contained tutorial for the language.

A more advanced book on Java, which just came out is:

Buy at Amazon Bloch, Joshua, and Neal Gafter. Java Puzzlers: Traps, Pitfalls, and Corner Cases. Reading, MA: Addison-Wesley Professional, 2005. ISBN: 032133678X.
It contains a very entertaining and thought-provoking collection of puzzlers that elucidate subtle aspects of Java.

Java References

Other books on Java include:

Buy at Amazon Arnold, Ken, James Gosling, and David Holmes. The Java Programming Language. 3rd ed. Reading, MA: Addison-Wesley, 2000. ISBN: 0201704331.
A brief explanation of Java. Assumes more background; much less explanation about how to use Java's features. User interface libraries are not discussed. Details online.

Buy at Amazon Gosling, James, Bill Joy, and Guy Steele. The Java Language Specification. 3rd ed. Reading, MA: Addison-Wesley, 2005. ISBN: 0321246780.
The official reference for Java by its inventors. Good for reference, but not an easy way to learn Java. Available as a book, or online.

Buy at Amazon Flanagan, David. Java in a Nutshell. 4th ed. Cambridge, MA: O'Reilly Publishing, 2002. ISBN: 0596002831.
A reference book rather than a tutorial. Succinct but covers a lot. Assumes knowledge of a language like C. Details online.

Buy at Amazon Eckel, Bruce. Thinking in Java. 3rd ed. Upper Saddle River, NJ: Prentice Hall, 2002. ISBN: 0131002872.