What books should all serious developers read and study? This is a list of books that I have either found particularly helpful in my own growth as a programmer, or that are popular on various required-reading lists. I have bolded books I consider absolute required reading (probably multiple times) for all software developers.
I’ve gathered these books from multiple sources, beginning with Steve McConnell’s list in the back of Code Complete.
By the way, just because a book is listed in the Introductory section does not mean you shouldn’t read it because you’re advanced.
Why the Have I Read? column? To keep me honest, and to serve as my own checklist.
(Updated 11/28 – PeopleWare)
(Updated 12/7 – Design of Everyday Things)
(Updated 1/26 – Beautiful Code, Essay section)
(Updated 6/3 – Pragmatic Unit Testing in C# with NUnit)
Introductory
Book |
Have I Read? |
Code Complete: A Practical Handbook of Software Construction Steve McConnell |
Y |
Conceptual Blockbusting: A Guide to Better Ideas James L. Adams |
|
Programming Pearls (2nd Edition) (ACM Press) Jon Bentley |
Y |
Facts and Fallacies of Software Engineering Robert Glass |
|
The Pragmatic Programmer: From Journeyman to Master Andrew Hunt and David Thomas |
Y |
Object-Oriented Design Heuristics Arther Riel |
Y |
UML Distilled: A Brief Guide to the Standard Object Modeling Language (3rd Edition) (The Addison-Wesley Object Technology Series) Martin Fowler |
|
Applying UML and Patterns: An Introduction to Object-Oriented Analysis and Design and Iterative Development (3rd Edition) Craig Larman |
|
Refactoring Workbook William Wake |
|
The Mythical Man-Month: Essays on Software Engineering, Anniversary Edition (2nd Edition) Frederick Brooks |
Y |
Introduction to Algorithms Thomas Cormen |
Intermediate
Professional
Book | Have I Read? |
Software Architecture in Practice (2nd Edition) (The SEI Series in Software Engineering) Len Bass, Paul Clements, and Rick Kazman |
|
Refactoring: Improving the Design of Existing Code (The Addison-Wesley Object Technology Series) Martin Fowler |
Y |
Design Patterns: Elements of Reusable Object-Oriented Software (Addison-Wesley Professional Computing Series) Eric Gamma, Richard Helm, Ralph Johnson, John Vlissides |
Y |
Principles Of Software Engineering Management Tom Gilb |
|
Writing Solid Code Steve Maguire |
|
Domain-Driven Design: Tackling Complexity in the Heart of Software Eric Evans |
|
Working Effectively with Legacy Code (Robert C. Martin Series) Michael Feathers |
|
Agile Estimating and Planning (Robert C. Martin Series) Mike Cohn |
|
Lean Software Development: An Agile Toolkit (The Agile Software Development Series) Mary Poppendieck and Tom Poppendieck |
|
Implementing Lean Software Development: From Concept to Cash (The Addison-Wesley Signature Series) Mary Poppendieck and Tom Poppendieck |
Essays
Essay | Have I Read? |
Teach Yourself Programming in Ten Years Peter Norvig |
Y |
They Write the Right Stuff Charles Fishman |
Y |
The Humble Programmer Edsger Dikstra |
Y |
Management
Book | Have I Read? |
Peopleware: Productive Projects and Teams Tom DeMarco |
Y |
Windows
Book | Have I Read? |
Microsoft Windows Internals, Fourth Edition: Microsoft Windows Server(TM) 2003, Windows XP, and Windows 2000 (Pro-Developer) Mark Russinovich and David Solomon |
Y |
Programming Windows, Fifth Edition Charles Petzold |
Y |
Programming Applications for Microsoft Windows Jeff Richter |
Y |
Programming Windows With MFC Jeff Prosise |
Y |
.Net
Book | Have I Read? |
Inside C#, Second Edition Tom Archer and Andrew Whitechapel |
Y |
CLR via C#, Second Edition (Pro Developer) Jeff Richter |
Y |
Technorati Tags: books, software engineering, self improvement, developer education