Programmers Bookshelf

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
! - Fundamental and/or ground-breaking books
? - I've not read it, but it's often recommended


Algorithms & Computer Science

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

cover

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

cover cover cover cover

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's website

cover

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


C++

cover

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

cover

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

cover

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

cover

Fowler, M -*! Refactoring: Improving the design of existing code Addison Wesley
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

cover

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

cover

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

cover

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

cover cover

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

cover

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


Code Quality

cover

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

cover

Maguire, S -! MS Press
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

cover

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

cover

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

cover

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

cover

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

cover

Shedroff, N -* Experience Design experiencedesignbooks
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.

cover

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

cover

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

cover

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

cover cover

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.

cover

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

cover

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

cover

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

cover

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


Computer Graphics

cover

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

cover cover cover cover cover

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

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.

cover

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

cover

Adobe -* Postscript Language Reference Manual

cover

van Vliet - * Document Manipulation & Typography


Games Programming

cover cover

Steve Rabin - AI Game Programming Wisdom and AI Game Programming Wisdom II

cover cover cover cover

The Games Programming Gems series: vol 1 , vol 2 , vol 3 , vol 4


HTML and the web

cover

Musciano & Kennedy -* HTML the Definitive Guide

cover

Sanders - * Javascript Design

cover

Watt - * Designing SVG Web Graphics


Project Management & Methodology

cover

Adams, S -* The Dilbert Principle

cover

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.

cover

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

cover

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

cover

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

cover

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

cover

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

cover

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


Translation & Localisation

cover

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


Also of Interest

cover

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

cover

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

cover

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

cover

Sterling, B - The Hacker Crackdown
full text online

cover

Pirsig, R -* Zen and the Art of Motorcycle Maintenance
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. - full book online

cover

Vogler, C - The Writer's Journey

This book applies the ideas from Campbell's The Hero with a Thousand Faces to the art of storytelling, as applied to film scriptwriting.


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


Most links on this page are in Association with Amazon.co.uk

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