Gamma, Helm, Johnson & Vlissides, "Design Patterns" ISBN 0-201-63361-2
The infamous "Gang of Four" book. The patterns movement is the latest, best hope
for getting some engineering into Software Engineering by documenting portions
of designs in a usable format. EVERBODY should read this book!
Lakoff, "Women, Fire and Dangerous Things" ISBN 0-226-46804-6
Subtitled - What Categories Reveal about the Mind - it is a slightly academic
work on cognitive models, attacking the "objectivist" viewpoint and providing
firm evidence that we categorize things in different ways. The implications for
OO designers are serious - this book helps explain why sometimes we can't find
the "right" objects, or why people differ in their choice of objects.
C++ BOOKS
Meyers, "Effective C++" ISBN 0-201-56364-9
very readable, full of simple recipes for adapting from C to c++ or avoiding
common mistakes in c++. I think any serious c++ programmer should be capable of
understanding this book.
ARM - Ellis & Stroustrup, "The Annotated C++ Reference Manual" ISBN 0-201-51459-1
(My copy has April 1994 revision date inside the cover). *the* reference manual
that describes every quirk of the language - the sort of thing you must quote if
you want to pick an argument with compiler writers
Lippman, "C++ Primer 2nd ed." ISBN 0-201-54848-8
A rather long-winded primer. If you like succint explanations avoid this and
just buy the ARM, but have a look in at it the bookstore first. It's a very good
introductory book and worth dropping back to if you find the others heavy going.
Coplien, "Advanced C++ Programming Styles and Idioms" ISBN 0-201-54855-0
You need to be very competent in c++ to understand this book but it presents
some interesting techniques, particularly if you're into more dynamic designs
that normally associated with c++. I found it a great thought-provoker while
designing the framework.
Barton & Nackman, "Scientific & Engineering C++" ISBN 0-201-53393-6
The examples are definitely SciEng oriented but the descriptions of advanced c++
techniques are superb, more readable than Coplien and well-illustrated with
diagrams. The emphasis on templates is probably due to the difference between
Coplien as a 1992 book and this in 1994. A great starting point for ex FORTRAN
and C programmers.
Spuler, "C++ and C Debugging, Testing and Reliability" ISBN 0-13-308172-9
A successor to Koenig's "C Traps and Pitfalls" this book combines a list and set
of debugging resources with a very clear list of common c++ errors. Some overlap
with Meyers' 50 rules occurs, but generally the errors listed are lower level
simple bugs.
Teale, "C++ IOStreams Handbook" ISBN 0-201-59641-5
The only detailed and clear explanation of IOStreams that I've seen or seen
mentioned. The book documents the older AT&T streams library so there have been a
few minor changes but it is still largely applicable and makes a clear case for
moving to streams.
"Taligent's Guide to Designing Programs" ISBN 0-201-40888-0
an internal style guide that grew. Very good advice on
structuring libraries to minimize impact of change
OBJECT-ORIENTED DESIGN
Robert Martin, "Designing Object-Oriented C++ Applications Using the Booch Method" ISBN 0-13-203837-4
A great book that teaches OOA & OOD by example, including the thought processes,
backtracking and refinement of real examples. It discusses the trade-offs in c++
designs and includes metrics for design quality.
Walden & Nerson, "Seamless Object-Oriented Software Architecture" ISBN 0-13-031303-3
Describes the BON method, which grew out of attempts to formalise Eiffel into a
design language. BON offers hope for complex and large projects with compression
of diagrams without loss of readability. The visual notation is paralleled by a
textual form. Martin's book rescues the Booch method from some of the
smoke-and-mirrors that goes into identifying objects, but BON has different
approaches that are worth investigating.
DATABASE BOOKS
Cattell (ed) "The Object Database Standard: ODMG-93" ISBN 1-55860-302-6
Clearly written standards document (amazing!). Interesting to note how much OOFILE
resembles their ideas for the "future" c++ binding - this is entirely parallel
evolution of ideas (comfortingly).
Loomis, "Object Databases The Essentials" ISBN 0-201-56341-X
Great overview of products and forces in the development of ODBMS technology to the
current state (publication date is 1995). The book covers a lot of issues succintly.
INTERFACE DESIGN
"Designing Visual Interfaces", Kevin Mullet and Darrell Sano
ISBN 0-13-303389-9
This is a BEAUTIFUL little book which "approaches interface design from the perspective of communication-oriented graphic design, industrial design, and architecture."
It is full of examples of good and bad interface, discussion of layout (including grids). eg: the 10 pages on grids has 9 illustrations including 4 screen shots.
The book includes screens and discussions of standards from Mac, MS Windows, Open Look and Motif. Nobody is spared bouquets or brickbats.
This is now my number-one "must buy" for anyone in interface design. It is so clearly written you can use it to explain almost any point of discussion that comes up in trying to explain why a design is good/bad.