Recommended Textbooks
There are no required textbooks. We recommend two books:
Liskov, Barbara, and John Guttag. Program Development in Java: Abstraction, Specification, and Object-Oriented Design. Reading, MA: Addison-Wesley, 2000. ISBN: 0201657686.
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:
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.
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.
———. 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.
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:
Horton, Ivor. Beginning Java 2: JDK 5 Edition. New York, NY: Wiley Publishing, 2004. ISBN: 0764568744.
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:
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:
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.
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.
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.
Eckel, Bruce. Thinking in Java. 3rd ed. Upper Saddle River, NJ: Prentice Hall, 2002. ISBN: 0131002872.