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
Bentley, J -* Programming Pearls
Goldschlager & Lister -*
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's website
Knuth, D -*!
This presents the idea of programming as a branch of literature rather than engineering - Knuth's website or see www.literateprogramming.com
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 -*
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 -*
and More Effective C++
The CD edition contains the text of both these books: an essential guide to better C++ programming
Sutter, H -*
47 Engineering Puzzles, Programming Problems, and Solutions
McConnell, S -!
Practical guidance on producing good quality code
Maguire, S -!
A general handbook on how to avoid bugs - Quality Ensurance rather than Quality Assurance
Card, Moran & Newell -*
The Psychology of Human-Computer
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 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 -*
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.
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.
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
Patterns in Java
also includes an excellent introduction to UML
It's this book that really brings home what patterns are and how to use them
Foley & VanDam at al -#
Computer Graphics Principles & Practice 2nd Edition
Also known as the "Big White Bible"
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.
Computational Geometry in C
Lots of good stuff on topics such as polygon partitioning, voroni diagrams, convex hulls, etc
Adobe -* Postscript Language Reference Manual
van Vliet - * Document Manipulation & Typography
Steve Rabin - AI Game Programming Wisdom and AI Game Programming Wisdom II
The Games Programming Gems series: vol 1 , vol 2 , vol 3 , vol 4
Musciano & Kennedy -* HTML the Definitive Guide
Watt - * Designing SVG Web Graphics
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
Addison Wesley "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 -*
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 -*
"Why on earth did I let myself get suckered into such a project?"
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
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 - book website
Sterling, B -
The Hacker Crackdown
full text online
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
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.
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 Information, Visual Explanations
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