Booklist

This is my selection of recommended books for software developers. They are either books that I own, or ones which have influenced my work

* - I have my own copy of the book
# - Greenstreet has a copy of the book
! - Fundamental and/or ground-breaking books
? - I've not read it, but it's often recommended

Other good software engineering bibliographies can be found at:

Scientific books: www.amsci.org/amsci/bookshelf/centurylist.html
Typographic books: www.typebooks.org
I have also made a list of my Popular Science Books


Algorithms & Computer Science

Bentley, J -* Programming Pearls
An excellent book on algorithms, data structures, and bright ideas

Goldschlager & Lister -* Computer Science 
This is also the initial recommended reading for entrants to the Cambridge undergraduate Computer Science course

Knuth, D -! The Art of Computer Programming
    1 - * Fundamental Algorithms
    2 - Seminumerical Algorithms
    3 - Sorting & Searching
The old classic 3-volume set: a little obscure these days, due to the idiosyncratic way the algorithms are presented in the imaginary MIX assembler language.

Knuth, D -*! Literate Programming
This presents the idea of programming as a branch of literature rather than engineering - see www.literateprogramming.com


C++

Austern, M.H -* Generic Programming and the STL
Excellent introduction to the ideas behind the STL, and a reference manual of the STL's components

Coplien, J -* Advanced C++ Programming Styles and Idioms
An important precursor to the Patterns movement, this book shows how particular C++ constructs can be used to solve some common problems in C++

Coplien, J -* Multi-paradigm design for C++
An important book combining ideas about object-oriented programming with generic programming, commonality and variability analysis, and solution domain analysis - but dull

Fowler, M -*! Refactoring: Improving the design of existing code
Refactoring is the process if manipulating the structure of a program to improve readability, extensibility, and other aspects of quality. An essential book on the subject of code maintenance

Lakos, J -*! Large-scale C++ Software Design
This discusses how to use C++ effectively for large projects.

Lippman, S -* C++ Gems
A collection of articles from "the C++ Report"

Martin, R -* More C++ Gems
More articles from The C++ Report; even better than the first book

Meyers, S -* Effective C++ and More Effective C++
The CD edition contains the text of both these books: an essential guide to better C++ programming

Sutter, H -* Exceptional C++
47 Engineering Puzzles, Programming Problems, and Solutions


Code Quality

McConnell, S -#! Code Complete
Practical guidance on producing good quality code

Maguire, S -#! Writing Solid Code
A general handbook on how to avoid bugs - Quality Ensurance rather than Quality Assurance


User Interface

Card, Moran & Newell -* The Psychology of Human-Computer Interaction
A scientific analysis of issues affecting the way people use computers - covers short-term memory, typing speed, reaction times, etc

Cooper, A -* About Face: the Essentials of User Interface Design
a book about designing software user interface, primarily for Windows

Johnson, S -* Interface Culture : How New Technology Transforms the Way We Create and Communicate
"In this hip, erudite manifesto, Steven Johnson bridges the gap that yawns between technology and the arts."

Microsoft -* Microsoft Windows User Experience
The latest corporate UI design guidelines

Norman, D.A -*! The Psychology Of Everyday Things (aka The Design of Everyday Things)
Why is it impossible to programme a VCR? Why do people push doors that open by pulling? - essential reading for UI design

Shedroff, N -* Experience Design
a book about today's intersection of disciplines, such as: interaction design, information design, visual design, and more related methodologies are just parts of the whole.

Winograd, T -* Bringing Design to Software
A collection of articles which argue that designing software for users should be seen as a separate discipline from both computer science and software engineering.


Object-Oriented Design

Meyer, B -* Object Oriented Software Construction
Written around the author's own Eiffel language, this book was my first introduction to the idea of object-orientation

Page-Jones, M -* Fundamentals of Object-Oriented Design in UML
good intro to object-oriented design, UML, and OO principles; uses slightly odd terminology "connascence" for what I would call "interdependence".
Chapters 1-2 introduce object orientation, Chapters 3-7 cover UML, Chapters 8-15 cover OO design principles.


Design Patterns

Alexander - A Pattern Language and A Timeless Way of Building
These are the books on traditional architecture which have had such an impact on software design.

Brown et al -* Antipatterns in project management
Common problems, pitfalls and mistakes in software/architecture/management and how to recognise and avoid them

Gamma, Helm, Johnson, Vlissides -*! Design Patterns: Elements of reusable Object-Oriented Software
The classic "Gang of Four" patterns book. Common ways of combining objects and classes to solve a design problem

Grand -* Patterns in Java
also includes an excellent introduction to UML

Vlissides -* Pattern Hatching
It's this book that really brings home what patterns are and how to use them


Computer Graphics

Adobe -*# Postscript Language Reference Manual

Foley & VanDam at al -# Computer Graphics Principles & Practice 2nd Edition
Also known as the "Big White Bible"

Newman & Sproull -# Principles of Interactive Computer Graphics - out of print
Includes an appendix on 'homogeneous coordinate techniques' as used in some of our bezier-fit code. Some online explanations of homogeneous coordinates can be found at stanford and caltech.

O'Rourke -* Computational Geometry in C
Lots of good stuff on topics such as polygon partitioning, voroni diagrams, convex hulls, etc

van Vliet - * Document Manipulation & Typography


HTML and the web

Musciano & Kennedy -* HTML the Definitive Guide

Sanders - * Javascript Design

Watt - * Designing SVG Web Graphics


Project Management & Methodology

Adams, S -* The Dilbert Principle

Brooks, F -*! The Mythical Man Month
A classic, based on the author's experiences at IBM in the 70's - essential reading for project management. There's a lot that's now irrelevant, or that I would now disagree with.

Cockburn, A - Agile Software Development
"how can we change the process so that the team is more productive, while also improving quality?"

McCarthy, J -# Dynamics of Software Development
Hints and tips based on the experiences of one of the Visual C++ team at Microsoft

McConnell, S -* Rapid Development
Describes and compares many different approaches to improving software development productivity

Maguire, S -*# Debugging the Development Process
From the author of "writing solid code", personal experiences of software development at Microsoft

DeGrace & Stahl -* Wicked Problems, Righteous Solutions
Explains the the waterfall project lifecycle and alternatives. (A "Wicked Problem" is one that you have to solve before you know how difficult it is.)

Yourdon, Ed -* Death March
"Why on earth did I let myself get suckered into such a project?"


Translation & Localisation

Hofstadter, D -* Le Ton Beau de Marot
This book is about (amongst other things) Hofstadter's experiences in translating his book "Godel, Escher, Bach" into other languages.

Kano, N -# Developing International Software - (full book online)
This is a technical manual on how to localise applications, and support a range of languages


OLE, COM &c

Brockschmidt, K -# Inside OLE

Box - ? Essential COM, ? Effective COM

Ewald - ? Transactional COM+

Platt, D S  - ? Understanding COM+

Sundblad - ? Designing for Scalability with Microsoft Windows DNA


Also of Interest

Bates - * Game Design: The art & business of creating games

Gause & Weinberg -* Are Your Lights On?
Whose problem is it? What's the root of the problem? Is it worth solving?

Hofstadter, D -* Fluid Concepts and Creative Analogies
Research into pattern-matching and problem-solving software

Sterling, B - The Hacker Crackdown - full text online

Pirsig, R -* Zen and the Art of Motorcycle Maintenance - (full book online)
An exploration into the differences between eastern and western philosophies and the question "What is Quality?", this book also covers some problem-solving techniques useful in debugging.


Other Specialist Topics

Useful books that were on the shelves at Greenstreet...

Kruglinski, D.J -# Inside Visual C++

Rector, B.E -# Windows 32 programming

Richter, J -# Advanced Windows

Glassner -# Graphics Gems I
Arvo -# Graphics Gems II
Kirk -# Graphics Gems III
Heckbert -# Graphics Gems IV
Paeth - Graphics Gems V
Cookbooks with C source code for common graphics problems - see also www.graphicsgems.org

Roth -# Real World Postscript
An impressive cookbook of techniques for hand-coded postscript


Other Key Books

I haven't read any of these, but they have been suggested to me as leading books in their field

Aho, Hopcroft & Ullman - The design and analysis of computer algorithms

Aho, Hopcroft & Ullman - Data structures and algorithms

Booch, G - Object oriented analysis and design with applications
The first edition of this book was instrumental in making object-oriented technology a practical reality

Ellis & Stroustrup - The Annotated C++ Reference Manual
Known as the ARM, this is the definitive reference on the C++ language.

Laurel, B - The Art of Human-Computer Interaction
Some say this book is dated (MacII in 1990), others say the principles are timeless

Tufte, E - The Visual Display of Quantitative InformationVisual Explanations