Books
Reading is not the only one way of learning and by no means replaces the best way which
is to work with other great people and talk, engage and collaborate to learn together.
There are also other sources of reading on the web such as blogs, web sites and
StackOverflow. But these provide a different kind of learning, sharp, focussed on
a solution or single issue. The broad background and depth of knowledge is most
easily consumed in book form. I can't recommend strongly enough reading as many books
as you can on the subject.
The foundation on top of which everything else is built. It took me years to
to read these books and it was important to read them in a context of being able
to practise and experiment as I went. It was also invaluable to have others
who were interested and to be able to discuss and debate them while being consumed.
A cold approach to just reading these books as a task without the context is
unlikely to be productive.
I owe a great amount to the authors listed on this page and have a huge respect for
the years of practicle, experience and insight that is contained in their books.
Most of them still write software and have active blogs and other outlets for there
current learnings, I encourage you to follow them.
Of course there are a lot of other great books out there but these are the ones that
shaped my thinking and pratise of software design. Looking back through my hardcopy
library the number of excluded books completely dwarfs the highly editted list
presented here. There is vast array of Dummies Guides and Proffesional series books
and tons of technology specific tomes. I read pretty much all of these at the time
but looking back besides being shocked at the volume it is also shocking how obsolete
most of those books are now.
Required Reading
The following books are the basics, without which discussions about
the details of why software should be written the way it should and
the techniques available are a lot harder.
I have tried to put in a suggested reading order but you may get better
mileage in a different order and I find that these are books we keep coming
back to and re-reading in a a new context and they keep giving.
Pragmatic Programmer, The: From Journeyman to Master
by Andrew Hunt and David Thomas
Refactoring: Improving the Design of Existing Code
by Martin Fowler, Kent Beck (Contributor), John Brant (Contributor), William Opdyke, don Roberts
Clean Code: A Handbook of Agile Software Craftsmanship
by Robert C. Martin
Working Effectively with Legacy Code
by Michael Feathers
Effective C#: 50 Specific Ways to Improve Your C#
by Bill Wagner
There have been 3 editions so far, worth keeping up with.
The Clean Coder: A Code of Conduct for Professional Programmers
by Robert C. Martin
Clean Architecture: A Craftsman's Guide to Software Structure and Design
by Robert C. Martin
Also useful
These books have also been useful to me. Usually when trying to find
out about a specific area or technique. They all warrant a cover-to-cover
read if it is an area of interest.
I have tried to list the most useful/still relevant ones at the top of the list.
Enterprise Integration Patterns: Designing, Building, and Deploying Messaging Solutions
by Gregor Hohpe
The Mythical Man-Month: Essays on Software Engineering
by Frederick P. Brooks Jr
The Cathedral & the Bazaar: Musings on Linux and Open Source by an Accidental Revolutionary
by Eric S. Raymond
Patterns of Enterprise Application Architecture
by Martin Fowler
Writing High-Performance .NET Code
by Ben Watson
AntiPatterns: Refactoring Software, Architectures, and Projects in Crisis
by William J. Brown, Raphael C. Malveau, Hays W. "Skip" McCormick, Thomas J. Mowbray
Extreme Programming Explained: Embrace Change, 2nd Edition
by Kent Beck, Cynthia Andres
Planning Extreme Programming
by Kent Beck, Martin Fowler
Test Driven Development: By Example
by Kent Beck
Growing Object-Oriented Software, Guided by Tests
by Steve Freeman
Death March
by Edward Yourdon
Head First Design Patterns
By Bert Bates, Kathy Sierra, Eric Freeman, Elisabeth Robson
..and for extra credit
I'm not sure about the usefulness of these books, but I have struggled through
them and if I suffered, so should you. And who knows, they may even be character building.
Design Patterns: Elements of Reusable Object-Oriented Software
by Erich Gamma (Author), Richard Helm (Author), Ralph Johnson (Author), John Vlissides (Author), Grady Booch (Foreword)
The original GOF (Gang of Four) patterns book. I don't know too many people who have read this but back in
the day we didn't have a whole lot else. Now days most of these patterns are just not useful or have been
discreditted as anti-patterns. But the names still come up and it is worth knowing where it all started.
The Art of Computer Programming, Volumes 1-4
by Donald E. Knuth
I could never justfy the expense of buying my own copy of these books. I have had a look at a few
borrowed copies but I'm far from claiming to have read it, nor even significant amounts of it
but the bits I did look at reminded me that there is lot of stuff I don't know. Maybe one day...