Category Archives: Books

The Effective Software Developer’s Book List

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

Book Have I Read?
Software Configuration Management Patterns: Effective Teamwork, Practical Integration
Stephen Berczuk and Brad Appleton
 
Software Creativity 2.0
Robert Glass
 
Testing Computer Software, 2nd Edition
Cem Kaner, Jack Falk, Hung Q. Nguyen
 
Rapid Development
Steve McConnell
 
Software Requirements, Second Edition
Karl Wiegers
 
“Manager’s Handbook for Software Development” (PDF)
NASA Goddard Space Flight Center
 
Patterns of Enterprise Application Architecture (The Addison-Wesley Signature Series)
Martin Fowler
 
Test Driven Development: By Example (The Addison-Wesley Signature Series)
Kent Beck
Y
Pragmatic Unit Testing in C# with NUnit, 2nd Edition
Andy Hunt, Dave Thomas, Matt Hargett
Y
Refactoring to Patterns (The Addison-Wesley Signature Series)
Joshua Kerievsky
 
Head First Design Patterns (Head First)
Elisabeth Freeman, Eric Freeman, Bert Bates, Kathy Sierra
 
User Stories Applied: For Agile Software Development (The Addison-Wesley Signature Series)
Mike Cohn
 
Agile Principles, Patterns, and Practices in C# (Robert C. Martin Series)
Robert Martin
 
Applying Domain-Driven Design and Patterns: With Examples in C# and .NET
Jimmy Nilsson
 
Extreme Programming Explained: Embrace Change (2nd Edition) (The XP Series)
Kent Beck
 
The Design of Everyday Things
Donald A. Norman
Y
Beautiful Code: Leading Programmers Explain How They Think  

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: , , ,

Farewell, Robert Jordan

According to his blog, Robert Jordan passed away yesterday. He fought a tough illness for quite a while. I became a big fan of The Wheel of Time a few years ago and forced myself to stop reading the books until the final one comes out.

I loved the books because they were immense, detailed, complex, and very engaging. He was in the middle of writing it, and he has left notes and given an oral narration of the end of the series, but it just won’t be the same.

Fahrenheit 451

I just read the book Fahrenheit 451 by Ray Bradbury. This is the first time I’ve read it, never having come across it in school, like most people seem to. To me, it was the greatest argument against getting a TV. My wife and I decided towards the beginning of our marriage to never subscribe to cable TV. My parents never did while I was growing up. We will probably get a TV at some point, but it won’t be hooked up to anything but a DVD player.

The theme of the book was not exactly what I expected: I had always heard it was about government censorship, and it is–sort of. The more important theme running through it is the danger of intellectual laziness. It portrayed a world where various minority groups demand that offensive books be banned, eventually leading to the solution of burning nearly all non-trivial books (operating manuals and such).

The point is that the problem started with the people, not the government. They demanded softer forms of entertainment: TV in it current form, comics, music. And all of those media were dumbed down to the point of banality as well.

Those media don’t HAVE to be so mindless, but in their present form they largely are. Books that challenge or expand our thinking are crucial parts of our society and personal development. This is something I’ve been taught since a very young age–and it’s why I’ve got about 2,000 books in my home right now, waiting to be read or re-read, and why I can’t resist buying a new book almost every month!

Code Complete 2

I finally bought myself a copy of Steve McConnell’s Code Complete, 2nd Edition. I’ve read about a third of it so far and love it. It’s by far the most practical and useful book on programming I have ever read.

But how to learn it all? Sure, an experience programmer will pick up many of these ideas over time, but how can I start implementing ALL of them?

I think my plan is to read it through once, and then while I sit at my desk at work (or home), leave it open to a random page so I can think about the displayed topic.