Books I Recommend

The following books have shaped the way I code. I bought them for myself, and recommend them to you.

Disclosure: Please note that the book links below are affiliate links. If you buy anything, I earn a commission, at no extra cost to you. I use all the books listed, and I recommend them because they have improved my coding. If you are ready to buy a book and would like to support this website in some way, using these links will help do exactly that. Everybody wins.

RefactoringRefactoring: The Improving the Design of Existing Code by Martin Fowler

The first book that completely changed the way I code. Started my whole journey. Essential.

See my post Refactoring: The Book that Changed Everything for Me
 

Working Effectively with Legacy CodeWorking Effectively with Legacy Code by Michael Feathers

The second book that changed the way I code. “Legacy code” is any code without unit tests.
 

Clean CodeClean Code: A Handbook of Agile Software Craftsmanship by Robert Martin

The third book that changed the way I code. Made my “clean code” so much cleaner.
 

Test-Driven iOS DevelopmentTest-Driven iOS Development by Graham Lee

Don’t just read this; actually work through the example yourself.

See my post Test-Driven iOS Development: The Book That Fills a Big Hole for more thoughts.
 

Test-Driven iOS Development with Swift 3Test-Driven iOS Development with Swift 3 by Dominik Hauser

Again, don’t just read this; actually work through the example yourself.
 

xUnit Test PatternsxUnit Test Patterns: Refactoring Test Code by Gerard Meszaros

A wealth of information on how to write, organize, and refactor test code.
 

Dependency Injection in .NETDependency Injection in .NET by Mark Seemann

Don’t be put off that it says “.NET” in the title. This is the best book on the subject.
 

The Art of Unit TestingThe Art of Unit Testing: with examples in C# by Roy Osherove

Don’t be put off by the “C#” in the title. This is good, good stuff.
 

Design PatternsDesign Patterns: Elements of Reusable Object-Oriented Software by Erich Gamma, Richard Helm, Ralph Johnson, John Vlissides

You can’t claim expertise in OOP without being familiar with this book.
 

Domain-Driven DesignDomain-Driven Design: Tackling Complexity in the Heart of Software by Eric Evans

Rethink Object Oriented Design by shaping your code to express the domain.
 

The Art of Agile DevelopmentThe Art of Agile Development by James Shore and Shane Warden

A practical handbook about applying Extreme Programming.