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
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's website
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
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
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++
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
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
Lakos, J -*!
Large-scale C++ Software Design
Addison Wesley
This discusses how to use C++ effectively for large projects.
Lippman, S -*
C++ Gems
develop.com
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++
Addison Wesley
The CD edition contains the text of both these books: an essential guide to
better C++ programming
Sutter, H -*
Exceptional C++
Addison Wesley
47 Engineering Puzzles, Programming Problems, and Solutions
McConnell, S -!
Code Complete
MS Press
Practical guidance on producing good quality code
Maguire, S -!
MS Press
A general handbook on how to avoid bugs - Quality Ensurance
rather than Quality Assurance
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
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.
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.
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
Addison Wesley
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
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.
O'Rourke -*
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
Sanders - * Javascript Design
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 -*
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?"
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