Following the pattern with the same name found in Apprenticeship Patterns this is a list of book I have read and found useful. You'll find a (sometimes very short) review of each book where I'll try to explain why I think it's worth while.

This list will never be complete since I'm continuously reading new books, not to mention all the once I've already read but not yet added. So do check back if you find it useful.

The listing is not in any particular order, at least not yet. I've just added books as they come to mind.

Apprenticeship Patters; by David H Hoover & Adewale Oshineye.

This book will have to come first in the list, it is after all the reason to why I'm publishing this page. This is the book I which someone would have put in my hands back in the late '90s when I started to develop software for money. It's a patterns books about how to continuously learn and each pattern, even though sometimes obvious, is really good. Here you will valuable guidance on how you can continuously grow you skills towards mastery. And even in the cases where the guidance is obvious it gives you name to refer to that practise with, which is the key point with a pattern. It is a fantastic thing that David and Ade have taken the time to make the patterns explicit, giving us a language to use when we talk about our journey. Thank you!

The Fifth Discipline; by Peter M Senge.

This is not a programming book. Some would even refer to it as a business or management book. But it's not that either in my opinion. It's about systems thinking, about how everything is connected, and about how no human is an island. Peter M Senge is a system thinker and has worked with upper management in several big organisations. Putting such organisations into a systems perspective, both how they work from the inside and how they interact with everything else, he lays out a path for how we can start to change things. This is a book that really makes an impact I think. There is so much wisdom here that can be applied to most things in life even if the book is very much oriented around managing organisations. I also think this is a great way to understand systems thinking in a practical way, and how it can help us better understand the interconnectedness of everything (and I mean that literary).

Test Driven Development, by example; by Kent Beck.

This book takes the reader through the TDD cycles as Kent Beck does it. It is a book that, like other books by Kent Beck, talks with the reader. I know people who find this way of narrating very difficult. But if you are like me, and like it when the author invites you to a conversation yo0u will find this book very easy to read indeed. It is also one of the best books on how to do TDD step by step. He uses two examples, one for beginners and one for more intermediate readers.

Growing Object Oriented Software, Guided by Test; by Steve Freeman and Nat Pryce.

If TDD by example is a good book on the basics of TDD and how to use it, this is what takes that knowledge and puts it into a really useful context. Here the authors takes us through the steps of writing an not trivial software solution, from idea to deployment. This book is not just about TDD, it is also about Continuous Integration (and to an extent also delivery) and design. TDD will not teach you how to design good software but this book has a lot of good pointer as to how you can do that. You will also learn what a Dancing Skeleton is and many other patters. There are a number of pointer to how you can inject this into a brown field code base as well.

Clean Code; by Robert C Martin.

Clean Code is about just that. It is a very opinionated book and you don't have to agree with all of Uncle Bob's opinions on clean code. But there are a lot of wisdom in this book as well. I have hosted a number of reading groups around this book and it is very good at getting the conversation going. Much thanks to Uncle Bob's way of sometimes being provocative. You will find a lot of good design principles and guidance that will get you a long way on your journey towards becoming a master programmer.

Refactoring, Improving the Design of Existing Code; Martin Fowler.

You will most certainly have heard of refactoring as a concept. You will most likely also have said that you are refactoring your code, and heard others say it. But I find that many don't know the original definition of refactoring. This book will teach you exactly that. This is the original piece that properly defined the practise and it also contains the many of the most common refactoring patterns.

I am reviewing the first edition here, since I've not read the second edition yet. But my guess is that you should read second edition now that it's been released.

Working effectively with legacy code; Michel Feathers.

We've all run into code bases that leaves us in a sad state of despair. Code bases that scares the wits out of us when we've got to change them. What I have found though is that this is something we can learn to overcome. And this is the book that taught me. You will find a loads of practical patterns and practices in this book, both for low level languages such as C and for higher level languages. An even if your particular language is not represented in the book the patterns it teaches will be useful.