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

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++. |
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. |
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. |
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. |
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. |
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. |
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. |
Tip:
After you've learned the basics, get this book to become a better
programmer.
|

Eiffel

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. |
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. |
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. |
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. |
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. |
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. |
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. |
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. |
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. |
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. |
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. |
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. |
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. |
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. |
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". |
Tip:
This book is especially recommended if you are new to OO techniques
or to incremental/iterative development processes.
|

|