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

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

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. And even if your particular language is not represented in the book the patterns it teaches will be useful.

Conversational Capacity: The Secret to Building Successful Teams That Perform When the Pressure Is On; Craig Weber

I talk a lot about dialogue and how important it is. But am I any good at it? I suppose I'm better than some, but I would not say I've mastered it. So I decided to read up on the topic. How can I improve my skills at dialogue. And I stumbled on this book. Craig Weber gives the skill a name, Conversational Capacity. He then looks at what makes it so hard to hold a dialogue, especially in stressful situations, and how we can counter our instincts which work against us. Both as individuals and as teams. Towards the end of the book he also digs in to how we can use this skill to learn together and become adaptive thinkers. And he touches leadership and how we can lead a team or organisation towards higher conversational capacity.

All in all it's a very worthwhile book with a lot of practical advice on how to improve our conversational capacity. I think it's an important book to read. But don't stop there. It's also a great book to use for a book study group where you learn this skill together.

Software architecture for Developers; Simon Brown

In this book Simon Brown looks at a both the people skills and the technical skills associated with architecture. It's a good starting point and will give the reader an insight into some aspects of architecture and the role associated with it that are sometimes forgotten. Namely, the importance of communication and people skills.

The C4 model for visualising software architecture; Simon Brown

Here Simon Brown lays out a rather simple but yet very powerful way to visualise software architectures. It's not the only visualisation tool needed but it does take you a long way.

Fundamentals of Software Architecture; Mark Richards and Neal Ford

In this book Mark Richards and Neal Ford goes through pretty much every aspect of architecture. From the basics of what components are and how coupling works to different architecture styles. They also go through the role and skills that someone working with architecture needs, such as negotiations skills, presentation skills, team skills and much more.

Building Evolutionary Architecture; Neal Ford, Rebecca Parson and Patrick Kua

Some will probably claim that this book shouldn't be in a list of literature for novice architects. I disagree. It is a rather advanced book. But it is also essential in my opinion since almost every "legacy system" I've ever worked with have been missing exactly this. The ability to evolve into what is needed now.

I hope that will help you get started on your journey into software architecture as a discipline. And know that there are loads more out there once you've finished the above.