Java

The Java Programming Language, 2nd edition
By James Gosling (the father of Java) and Ken Arnold. This book is to Java what K&R is to C. Grab the Java2 appendix at http://www.awl.com/cseng/titles/0-201-31006-6/1_2Update.pdf

Thinking in Java
By Bruce Eckel. If the Gosling/Arnold book is too terse for you, try this one. A very good explanation of the Java language and OO programming.

The Java Language Specification
By James Gosling, Bill Joy, and Guy Steele. The final word on the Java language (except that it needs to be updated for 1.1. and 1.2) Any serious Java programmer should own a copy for reference and it doesn't hurt to read it too. Also available online.

The Java Virtual Machine Specification
By Tim Lindholm, Frank Yellin. The other spec -- if you really want to grok Java you'll buy and read this book. Also available online.

Concurrent Programming in Java: Design Principles and Patterns
By Doug Lea. Required reading if you are going to be writing multi-threaded programs in Java. The second edition is now available and even better the first.

OO theory and practice

Design Patterns: Elements of Reusable Object-Oriented Software
By Erich Gamma, Richard Helm, Ralph Johnson, and John Vlissides. The book that started the patterns movement in software engineering.

UML Distilled: Applying the Standard Object Modeling Language
By Martin Fowler and Kendall Scott. A useful and brief introduction to UML, the Unified Modeling Language. This was originally a bit of a placeholder until the three amigos books shiped. But if you don't want to wade through all three of the three amigos books (Grady Booch's Unified Modeling Language User Guide, James Rumbaugh's Unified Modeling Language Reference Manual, and Ivar Jacobson's Unified Software Development Process) this is a good intro to see if you want more. Personally I've got all three of the three amigos' books on my shelf and they aren't perking to the top of my priority list.

The Art of the Metaobject Protocol
By Gregor Kiczales, Jim des Rivieres, and Daniel G.Bobrow. If you think you've fully grokked object orientation, try wrapping your head around metaobject orientation. Virtually no mainstream OO languages provide support for a metaobject protocol, or MOP, but you'll deepen your understanding of what makes object oriented languages tick if you read this book.

Software engineering

Rapid Development: Taming Wild Software Schedules
By Steve McConnell. A process book -- a massive collection of best practices and the rationales behind them. Anyone who writes software under deadline pressure should read this book.

Code Complete: A Practical Handbook of Software Construction
By Steve McConnell. Just as good as Rapid Development but more focused on the actual production of code as opposed to the management of the production of code.

The Deadline: A Novel about Project Management
By Tom DeMarco. DeMarco's no Tolstoy but The Deadline is a fun read and full of interesting ideas about how to manage software projects.

Peopleware: Productive Projects and Teams
By Tom DeMarco and Timothy Lister. A now-classic book on the care and feeding of professional programmers. Worth reading if you're a programmer trying to figure out why you can't get anything done at work. Required reading if you manage programmers.

Debugging the Development Process
By Steve Maguire. Another must-read for managers and project leads. Though you wonder a bit when a guy from Microsoft claims that it's better to leave features out than ship them implemented badly.

Miscellaneous

The New Hacker's Dictionary
Compiled by Eric S. Raymond. The book version of the Jargon File. The only dictionary I ever read cover-to-cover. A compendium of hacker lore and wisdom.

Hackers: Heroes of the Computer Revolution
By Steven Levy. An ode to the hacker ethic -- and a history of hacking from the AI lab at MIT in the 50s to Silicon Valley in the 80s.

Where Wizards Stay Up Late: The Origins of the Internet
By Katie Hafner and Matthew Lyon. A history of how the internet was built. Just interesting.

Back to index


Peter Seibel <peter@javamonkey.com>
Last modified: Thu Feb 10 20:15:44 Pacific Standard Time 2000