There are many ways to improve the craftsmanship for software development. In my opinion the best way is pair programming with skilled software developers. A good way to supplement this, is reading blogs and books. I have compiled a list of the 10 books that have helped and inspired me the most when it comes to software craftsmanship.
Even though only one of the book has the word Agile in the titel, I consider all of thees books as a technical foundation that enables teams to follow the agile principles.
None of the books are about a particular programming language or technical framework. Instead they describe som key principles and best practices in software development. Many of the books are equally relevant for Software Testers and Software Developers.
Clean Code
The book has a very clear-cut for what is good and bad code design. Some might not like this black-and-white style, but for me it created awareness of what do I consider as good code and helped me get rid of many bad coding habits, early in my career.
When working together with other software developers having a shared set of principles for how code should be designed is important. This books make an excellent baseline for that discussion in the team.
extreme Programming explained
Like Robert C. Martins book, Clean Code, The book eXtreme Programming explained by Kent Beck, has a black-and-white attitude on how and what practices to use. This book is important because it emphasise the responsibility software developers have of delivering quality software. If you believe code-review is good, then do it continuously with pair programming.
This book is complementing Scrum-frameworks. The Scrum framework is generalised around Product development, and has become less and less focused on the software development part. For software development teams this give frustration on how to work in a Scrum team. Because Scrum does not give any guideline for how do software development. Extreme programming shows which practices to use in order to do software development for Scrum teams.
Refactoring
A common issue many Product Owners and Software Developers have is how to handle technical debt. This is especially true for Software teams that are dealing with legacy systems. This book has patterns for removing technical debt in small incremental steps.
The book is a really good reference when you need to remove technical dept in a legacy system.
Any fool can write code that a computer can understand. Good programmers write code that humans can understand.
Martin Fowler
Test Driven Development, By example
This book takes the implementation of a bank account with Test-driven development (TDD). It shows the principles of TDD, but what I really like about this book, is how it demonstrates iteratively development, with all the refactoring needed, and you see how TDD work as a safety net and guide the development.
It also shows that TDD can happen in both small incremental steps and larger steps.
The Art of Unit Testing
There is unit-testing, and then there is The Art of Unit Testing. Roy Osherove really unit testing to the next level. One of the principles that Roy Osherove encourage, is that if you can change a condition in the production code, and there is no falling unit test, then the code will not pass the Code-review.
This book is pretty long, but works as a reference book with different techniques for implementing unit test.
Specification By Example
This is one my personal favorite book on software testing and test-automation. The book contains examples from many different type of companies and how they used Specification By Example (also known as Behavior Driven Development).
It also illustrates how Software Testers, Business analyst and Software Developer can collaborate and create high quality products.
Agile Testing
The Agile Testing book is like Specification By Example very relevant for both Software developers and Software Testers. Lise Crispin and Janet Gregory made the Agile Testing Quadrant very popular with this book. The only part that I don’t like about this book is the topic on test automation. I believe it is a bit old
Dependency Injection Principles, Practices, and Patterns
This book takes one of the 5 principles in SOLID (Dependency Injection). This principles is extremely important to build modular code, that can be easily tested. One issues that many companies struggles with is having enough fully functional environments for testing. These environment are often expensive and there never seems to be enough. It is one of the more technical books on the list, but it is important because it does not only enables the software to be modular, it also helps the company to do testing with fewer fully functional test-environments. The book also has a earlier version, where the examples are all in C# (.Net)
97 things every programmer should know
This books lets us tap into the wisdom of experts software programmers. It gives us 97 short and useful tips for programmers. This book has tips that are easy to remember and expanded and change my approaches to common software problems, learning appropriate best practices, and honing your craft through sound advice.
Design patterns
For me this is the bible when it comes to software design. It is a bit heavy to read, but the good news is, you don’t have to read it all of it at once.. It is a really good reference book that gives you patterns for how to design solutions for different kind of software problems. One thing to keep in mind, is that if you are going to use some of the more advanced patterns, the rest of the software developers in your team need to be aligned and have a common understanding of design principles for that pattern.
Theses was the 10 books that has influenced me the most when it comes to Software craftsmanship. I have not mentioned books like The Phoenix Project or The Mythical Man-Month, as for me they are more about Lean software development and not Software craftsmanship.
I would like to hear which books on software craftsmanship you have been inspired from? Please leave a comment below.