Texts
Required Reading
Recommended Reading
Absolute Java (6th Edition) by Walter Savitch. (Highly recommended. This book walks the reader through Java at a reasonably slow pace.)
Effective Java by Joshua Bloch (Highly recommended for those who have some Java experience but would like to learn more/delve deeper.)
Java basics by Oracle. These lessons cover most of the basic knowledge of Java that you should have to tackle the assignments and understand the lecture notes.
Head-First Design Patterns by Eric Freeman, Bert Bates, Kathy Sierra and Elisabeth Robson. (An easy-going and fun introduction to design patterns with examples in Java.)
Design Patterns: Elements of Reusable Object-Oriented Software by Erich Gamma, Richard Helm, Ralph Johnson and John Vlissides. (The standard reference for object-oriented design patterns.)
How to Design Programs (Second Edition) by Felleisen, Findler, Flatt, and Krishnamurthi. Draft, 2010.
How to Design Classes by Felleisen, Findler, Flatt, Gray, Krishnamurthi, and Proulx. Draft, 2008.