I am currently pulling together various materials I have found useful over the years to create some short reference materials for software developers I am managing. This is just a quick reference list of the books that I have found very useful in shaping my opinions on the practical implementation of software development.
Clean Code – A handbook of agile software craftsmanship
This book gives detailed guidance on how to write software that is easy to read and maintain in the future by following S.O.L.I.D coding principles. It challenges many long held beliefs about how software should be written with well-reasoned arguments.
Refactoring – Improving the design of existing code
This is ‘the’ book to refer to when you want to change the design of existing code whilst not changing its behaviour. By following these methods is it possible to keep the existing functionality whist reduce the size of the codebase making the code more maintainable and extensible in the future.
xUnit Test Patterns – Refactoring Test Code
This book provides tried and tested strategies and patterns for structuring automated unit tests. It explains in detail what has to be considered when writing tests to ensure that they do not become more of a burden for a software project than an asset.
Dependency Injection in .Net
This book provides in depth and very clear explanation of what Dependency Injection is and how it should be used to realise the benefits it provides. Whist the excellent examples are in .Net the content in this book applies equally to any object orientated programming language.
The Art of Unit Testing
This book provides practical examples of how to write Unit Tests in a maintainable way. This book combined with Dependency Injection in .Net provides excellent working examples of how to structure code in a testable way.
Working Effectively With Legacy Code – Michael Feathers
This book provides tried and tested strategies for maintaining legacy code that does not currently have automated test coverage. It describes the various problems that you will encounter when trying to maintain or change existing code and what has to be considered