CodeCraft

Hand crafted code

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...