Readings

Recommended Textbooks

There are no required textbooks. We recommend two books:

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

Amazon logo 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:

Amazon logo 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.

Amazon logo 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.

Amazon logo ———. 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.

Amazon logo 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:

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

Amazon logo 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:

Amazon logo 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:

Amazon logo 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.

Amazon logo 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.

Amazon logo 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.

Amazon logo Eckel, Bruce. Thinking in Java. 3rd ed. Upper Saddle River, NJ: Prentice Hall, 2002. ISBN: 0131002872.
Also available on-line at Mindview (but don't try printing it yourself - it's over 1000 pages long!). Written for someone who can already program but isn't familiar with Java or object-oriented programming notions. Goes into lots of detail on tricky aspects like GUIs, multithreading, and remote method invocation.