Recommended Books

If you could get only one book on X, what would it be?
This is the question that guided me in choosing the following books. In each subject, you'll find the one book that I think is best. Each book description is followed by a tip, stating the audience or context for which it is most useful.

Clicking a book's title will allow you to order it from Amazon.com.

------------------------------

Contents:
1. OO Design:
Tutorials
Classics
Patterns
3. Components and Databases:
CORBA
COM
ODBMS
2. OO Languages:
C++
Java
Smalltalk
Eiffel
4. Management and Process:
General Software Management
OO Software Management

------------------------------



---------------
1. Object Oriented Design
---------------

Tutorials

Agile Software Development, Principles, Patterns, and Practices
by Robert C. Martin

A very practical book to learn object oriented design, even if you don't intend to use C++. Leads the reader through several design case studies, without magically showing correct designs right from the start, but instead lets the reader experience iterative design where early designs change due to new insights.
o-< Tip:
Get this book to actually learn how to do OOD, not just read about it. Assumes basic knowledge of C++.
UML Distilled: Applying the Standard Object Modeling Language, 2nd Edition
by Martin Fowler, Kendall Scott, Ivar Jacobson

An excellent (and short!) book for learning object oriented analysis and design using UML (the evolutionary descendant of Booch, OMT and Jacobson notations). Covers use case, class, sequence, state, activity, and deployment diagrams.
o-< Tip:
Read this book to upgrade your modeling knowledge to UML, or just to upgrade you OOA/D skills. It's like Japanese poetry: short yet intense.
Real-Time UML: Developing Efficient Objects for Embedded Systems, 2nd Edition
by Bruce Powel Douglass

A great introduction to object oriented design, real time programming and the combination of the two.
o-< Tip:
Developing embedded and/or real-time software? You need this book. No other source covers real-time design so well.


---------------

Patterns

Design Patterns: Elements of Reusable Object-Oriented Software
Erich Gamma, Richard Helm, Ralph Johnson, and John Vlissides (AKA the Gang of Four or GoF)

The "canonical text" of object oriented design patterns. A must read for anyone using object oriented techniques. Includes 23 OO design patterns.
o-< Tip:
What?! You haven't read this already?!?!
Pattern Oriented Software Architecture: A System of Patterns
by Frank Buschmann, Regine Meunier, Hans Rohnert, Peter Sommerlad

A well organized collection of patterns, ranging from high level architecture, through design patterns, and down to programming idioms. Very thorough.
o-< Tip:
Your next patterns book, after reading the GoF book. It will advance your patterns knowledge from small designs to complete architectures.
Object-Oriented Design Heuristics
by Arthur J. Riel

Not really a patterns book, but important non the less. Heuristics are the rules of thumb that master designers intuitively use. Riel explains these guidelines and makes them accessible for the rest of us.
o-< Tip:
Read this book only if you want to be a good OO designer :-) Really, this book teaches how to tell right from wrong in OO designs; it will develop your "OO conscience".


---------------

Classics

Object-Oriented Software Construction, 2nd Edition
by Bertrand Meyer

A comprehensive reference on object oriented techniques from the OO Guru (and creator of Eiffel) Bertrand Meyer.
o-< Tip:
To thoroughly understand objects, this is the text you need. Really covers everything.
Object-Oriented Analysis and Design With Applications, 2nd Edition
by Grady Booch

A second edition to the classic text, featuring UML, the new standard OO modeling notation.
o-< Tip:
To learn the mainstream OO approach, this is the book to get.
Object-Oriented Software Engineering: A Use Case Driven Approach
by Ivar Jacobson

Use cases are now a basic tool for driving software development. In this book, Jacobson presents use cases and shows how they help in capturing requirements and powering designs.
o-< Tip:
Serious about use cases? Read OOSE. No better way to learn use cases that to hear it from the master himself.


---------------
2. OO Programming Languages
---------------

C++

The C++ Programming Language, 3rd Edition
by Bjarne Stroustrup

An excellent book from the creator of C++. Covers all aspects of C++, including the standard library. Also contains chapters about design and development process. Explains not only the "how" but also some of the "why" of C++.
o-< Tip:
If you are a professional programmer wanting to learn C++, this is the book for you.
C++ Primer, 3rd Edition
by Stanley B. Lippman, Josee Lajoie

This book is the proof that you don't have to turn to shallow "C++ for morons" books if you find Stroustrup's The C++ Programming Language difficult to digest. Starts with the very basics without overwhelming the reader with all of the language's intricacies, but also covers advanced topics after the basis has been laid down.
o-< Tip:
If you want to learn C++, yet are afraid that Stroustrup's book will be too difficult, get this book.
Effective C++, 2nd Edition and More Effective C++
by Scott Meyers

These books can turn a C++ programmer into a good C++ programmer. They cover the dos and don'ts of C++ programming.
o-< Tip:
After you learned how to program in C++, get these books to program well.


---------------

Java

Core Java 2, Volume 1 and Volume 2
by Cay S. Horstmann and Gary Cornel

In depth and practical Java tutorial. Comprehensive coverage of the language and libraries, with many real world examples.
o-< Tip:
This is the book to get if you are a programmer who wants to take on Java seriously.
Concurrent Programming in Java: Design Principles and Patterns, 2nd Edition
by Doug Lea

A very important book that covers a difficult subject. Doug Lea takes the reader through the world multi-threaded and distributed applications, and shows practical solutions using Java.
o-< Tip:
So many of us are now required to program in multi-threaded, multi-process and distributed environments. This book helps find your way in this complex world of concurrent programming. Useful even if you don't intend to use Java.


---------------

Smalltalk

Smalltalk, Objects, and Design
by Chamond Liu

A good introduction of Smalltalk and object oriented programming. Uses IBM Smalltalk for the exercises.
o-< Tip:
This book is great for learning OOP using Smalltalk.
Smalltalk Best Practice Patterns
by Kent Beck

Learn to become a good Smalltalk programmer from the master. Kent Beck introduces the reader to the Smalltalk tricks of the trade.
o-< Tip:
After you've learned the basics, get this book to become a better programmer.


---------------

Eiffel

Object-Oriented Software Engineering With Eiffel
by Jean-Marc Jezequel

The up-to-date guide to Eiffel, by Bertrand Meyer's associate. Seems to come in place of a newer edition of Bertrand Meyer's classic Eiffel: The Language.
o-< Tip:
To learn Eiffel, this is the book to get.
An Object-Oriented Introduction to Computer Science Using Eiffel
by Richard S. Wiener

Many people claim that Eiffel is a perfect first programming language. Richard Wiener rose to the challenge and created this introductory programming book using Eiffel.
o-< Tip:
To make your first programming language an OO language, get this book.


---------------
3. Components and Databases
---------------

CORBA

Instant CORBA
by Robert Orfali, Dan Harkey, Jeri Edwards

A good high level introduction to CORBA. Covers a wide range of topics (CORBA 2.0 ORB, IIOP, CORBA services, and more) without getting deep into the technical details.
o-< Tip:
Read this book to learn what CORBA is all about.
Client/Server Programming with Java and CORBA, 2nd Edition
by Robert Orfali, Dan Harkey

Hands on introduction to CORBA and JavaBeans, providing the reader with operative knowledge. Includes many working examples.
o-< Tip:
Get this book if you are going to program JavaBeans or CORBA using Java.
Advanced CORBA Programming with C++
by Michi Henning and Steve Vinoski

Extremely useful CORBA tutorial. The authors not only explain the theory but ensure that you have a working application in every stage.
o-< Tip:
If you are a C++ programmer and want to get seriously into CORBA, this is the book for you.
The CORBA Reference Guide
by Alan Lamont Pope

A complete reference on CORBA and its services.
o-< Tip:
If you're seriously into CORBA, you'll need this reference. The details about the services are especially hard to find in other books.


---------------

COM

Essential COM
by Don Box, Charlie Kindel, Grady Booch

Essential reading for anyone serious about COM development. Explains high level concepts, and then takes the reader deep into threading models, apartments, marshalling techniques and security.
o-< Tip:
Definitely get this book if you are going to do any serious COM programming. Best understood after having some basic COM and C++ knowledge.
Effective COM: 50 Ways to Improve Your COM and MTS-Based Applications
by Don Box, Keith Brown, Tim Ewald, Chris Sells

An advanced COM text. Lists practical guidelines for serious COM programming.
o-< Tip:
Read this book to go beyond the COM essentials.


---------------

ODBMS

C++ Object Databases: Programming With the ODMG Standard
by David Jordan

A thorough guide to object databases programming. Covers ODMG 1.1, 1.2 and 2.0. Explains both OQL and the C++ mapping.
o-< Tip:
If you are going to program an application that uses an ODBMS, this is the book to get.
Object Databases in Practice
by Mary E. S. Loomis, Akmal B. Chaudhri

A comprehensive account of object databases. Contains in depth coverage of different system architectures, example applications, ODBMS selection and performance issues.
o-< Tip:
You need this book if you intend to design or administrate an ODBMS.
The Object Database Standard: ODMG 2.0
by R. G. G. Cattell, Douglas K. Barry, Dirk Bartels

The definite reference from the ODMG.
o-< Tip:
It is always good to have the reference near by. Keep it handy when you develop ODB applications.


---------------
4. Management and Process
---------------

General Software Development Management

The Mythical Man-Month: Essays on Software Engineering, 20th anniversary Edition
by Frederick P. Brooks Jr.

"Twenty years ago, Fred Brooks looked at a project he had completed and, like so many of us, asked himself what had gone wrong. Unlike most of us, Brooks found answers besides blaming Fate and other people." --Betsy Hanes Perry.
Anyone doing software development should read this classic book: developers, managers, clients.
o-< Tip:
Read this book, lend it to your colleagues, organize co-workers and buy it as a birthday present for your boss.
Principles of Software Engineering Management
by Tom Gilb

In this excellent book, Gilb presents his practical methods for producing high-quality, cost-effective software. The main themes are evolutionary delivery, formal inspections and accurate attribute specifications.
o-< Tip:
Anyone who shapes or affects the development process in his/her organization should read this book. Carefully.
Becoming a Technical Leader: An Organic Problem-Solving Approach
by Gerald Weinberg

An expert needs to be good in solving problems. A leader, on the other hand, needs to be good in helping others solve problems. It is like the difference between telling someone that 2+2=4, and teaching them how to make the calculation themselves. This book is about evolving technical expertise into leadership.
o-< Tip:
If you are (or aspire to be) leading, coaching or consulting technical people, this book is for you.
The Fifth Discipline: The Art and Practice of the Learning Organization
by Peter Senge

This eye opening book will change your understanding of organizations, their dynamics and your own role in them. Senge presents the five disciplines of management and shows how their combination can give rise to a higher form of social existence: the learning organization.
o-< Tip:
Get this book to learn the mental tools of modern management, or just to gain better understanding of the world.


---------------

OO Software Development Management

Surviving Object-Oriented Projects: A Manager's Guide
by Alistair Cockburn

It is amazing that a single person can produce such a large amount of sound, insightful and useful advice. Alistair Cockburn presents principles, patterns and case studies for managing projects that use object oriented techniques, choosing "just enough process" and separating hype from reality.
o-< Tip:
Even if you are not a manager, and even if you have done OO projects before, you will find a lot of useful advice in this book.
Object Solutions: Managing the Object-Oriented Project
by Grady Booch

Many times, the benefits of a new technology cannot be achieved without changing traditional organizational processes and structures. OO Guru Grady Booch complements his classic Object-Oriented Analysis and Design With Applications with this book, and lays out his management philosophy. The book contains a thorough description of project lifecycle, and includes many useful "key practices" and "rules of thumb".
o-< Tip:
This book is especially recommended if you are new to OO techniques or to incremental/iterative development processes.


------------------------------