Books I Recommend

Disclosure: The book links below are affiliate links. If you buy anything, I earn a commission, at no extra cost to you.

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

Refactoring 2nd. editionRefactoring: The Improving the Design of Existing Code (2nd Edition) by Martin Fowler

The first edition 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

The examples are in Objective-C, but the concepts go much deeper.

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

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

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.

Refactoring to PatternsRefactoring to Patterns by Joshua Kerievsky

How to refactor towards a pattern, and also away from a pattern.

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.