Java

Just Java, 4th Ed. (van der Linden, 1999) -- More of a tutorial than the very focused Java in a Nutshell, it is well-written and has a wealth of useful information. Includes an introduction to OOP as well. Very readable despite the nearly 800 pages; includes a CD of example code. Covers Java 1.2 (Java 2).

Refactoring: Improving the Design of Existing Code (Fowler et al, 1999) -- This book is about the nuts and bolts of how to improve the structure of existing code; more generally, it's about an approach to software engineering that attempts to deal fluidly with unknown requirements while maintaining and extending and existing system. The rules are all about improving object oriented code, and it contains extensive examples in Java, although it is not Java-specific in most cases. (No ACCU review yet.) Highly recommended.

Program Development in Java (Liskov and Guttag, 2000) -- A textbook used for software engineering courses at MIT, this is a top-down approach to object oriented design and implementation using Java as its vehicle. In other words, not the book to get if you want to learn Java as quickly as possible, but it is definitely one to consider if you are interested in OOP and Java. (No ACCU review yet.)

Java Servlet Programming (Hunter and Crawford, 1998) -- Explains in detail the mechanisms of Java Servlets, which also underlie JSPs. Unfortunately relies on the JSP 0.91 specification (things move fast these days), but I think most of the information is still good. A good, readable book which is useful if you work with servlets or JSPs.

Practical Programming

Code Complete (McConnell, 1993) -- A classic book on the nuts-and-bolts of programming. A good (but large) alternative/companion to The Pragmatic Programmer. Many excellent code examples. Highly recommended.

Rapid Development (McConnell, 1996) -- An excellent book on software processes; this is really about managing a software project, not directly about programming, but the two are really inextricably intertwined. This is the most practical project management book I've read. Highly recommended.

Refactoring: Improving the Design of Existing Code (Fowler et al, 1999) -- This book is about the nuts and bolts of how to improve the structure of existing code; more generally, it's about an approach to software engineering that attempts to deal fluidly with unknown requirements while maintaining and extending and existing system. The rules are all about improving object oriented code, and it contains extensive examples in Java, although it is not Java-specific in most cases. (No ACCU review yet.)

Extreme Programming Explained: Embrace Change (Beck, 2000) -- Extreme programming is a software development process which appears to subvert traditional approaches to software engineering. Does it work? The jury is still out, but this book makes a good case.

The Pragmatic Programmer (Hunt and Thomas, 2000) -- A succinct reference to programming best practices. These are things that have been learned the hard way; if you don't know them yet, get this book and learn them the easy way. Very practical and down to earth.

Programming Pearls (Bentley) -- If you design algorithms or write code, you should have this book on your bookshelf, along with the companion, More Programming Pearls. If you don't yet have the original edition, be sure to get the updated edition, Programming Pearls 2nd ed. (2000). Highly recommended.

The Practice of Programming (Kernighan and Pike, 1999) -- A practical guide to writing clear code, well organized and divided into easy to digest sections. It uses code examples in multiple languages, including C, Java, C++, Awk, and Perl, to illustrate how solution strategies are affected by language choice - and how they're unaffected.

Architecture & Design

UML Distilled, 2nd Ed (Fowler) -- The best introduction to the Unified Modeling Language.  Be sure to get the second edition, which covers the latest changes to UML (the ACCU review covers only the first edition, but it's very similar).  The book is fairly thin but contains a lot of useful information.  This may be the only UML book you need. Highly recommended.

Design Patterns: Elements of Reusable Object-Oriented Software (Gamma et al) -- The standard book on design patterns.  The majority of the book is a reference containing dozens of design patterns.  It functions best as a reference.  The book is also available in hypertext format on a CD, but I have not tried it out yet. Highly recommended.

Pattern Hatching: Design Patterns Applied (Vlissides, 1999) -- Works best as a companion and user guide to Design Patterns.  It walks through the creation of patterns and the tradeoffs involved in documenting a pattern design. (No ACCU review yet.)

Generative Programming: Methods, Tools, and Applications (Czarnecki and Eisenecker, 2000) -- The focus on this book is on automation of design, so in that sense it's a programming book. But the issues it tackles are definitely architectural and not language or system specific. (No ACCU review yet.)

Program Development in Java (Liskov and Guttag, 2000) -- A textbook used for software engineering courses at MIT, this is a top-down approach to object oriented design and implementation using Java as its vehicle. In other words, not the book to get if you want to learn Java as quickly as possible, but it is definitely one to consider if you are interested in OOP and Java. (No ACCU review yet.)

Project Management

The Deadline: A Novel (DeMarco, 1998) -- A novel about project management, traps, pitfalls, and solutions. An interesting and entertaining read. DeMarco turns out to be a pretty good novelist. (No ACCU review yet.)

Rapid Development (McConnell, 1996) -- An excellent book on software processes; this is really about managing a software project, not directly about programming, but the two are really inextricably intertwined. This is the most practical project management book I've read. Highly recommended.