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

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

Book cover

The Art of Agile Development: Pragmatic Guide to Agile Software Development

by James Shore and Shane Warden

​A handbook ​for applying Extreme Programming (XP). XP is the foundational agile approach ​focusing on technical practices.

Book cover

​The Art of Unit Testing: ​with examples in C#

by ​Roy Osherove

​This book ​gave me a solid foundation. Don’t be put off by the “C#” in the title. This is good, good stuff.

Book cover: Byond Legacy Code

​Beyond Legacy Code: Nine Practices to Extend the Life (and Value) of Your Software

by ​David Scott Bernstein

​A practical guide to technical agile practices.

Book cover

Clean Code: A Handbook of Agile Software Craftsmanship

by Robert Martin

I thought my code was already clean. Then I read this book, and it helped make my code ​so much cleaner.

Book cover

Dependency Injection Principles, Practices, and Patterns

by Mark Seemann and Steven van Deursen

​This book helped me get a handle on Dependency Injection. ​I read the first edition, and look forward to getting this update. The examples are in C# on .NET  — don’t let that put you off.

Book cover

​Design 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.

Book cover: Domain-Driven Design

​Domain-Driven Design: Tackling Complexity in the Heart of Software

​by Eric Evans

​This book explores Object Oriented Design (OOD). ​Can you shape your code to express ​your domain?

Book cover: The Mikado Method

​The Mikado Method

​by ​Ole Ellnestam and Daniel Brolund

An effective technique for tackling ​multi-step refactoring.

Book cover: Refactoring

Refactoring: Improving the Design of Existing Code​

by Martin Fowler

​The first edition completely changed the way I code, and started my whole journey. The second edition is better still. Essential.

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

Book cover: Refactoring to Patterns

Refactoring​ to Patterns

by ​Joshua Kerievsky

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

Book cover: Test-Driven iOS Development

Test-Driven iOS Development

by Graham Lee

The original iOS TDD book. 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.

Book cover: Test-Drive iOS Development with Swift 4

Test-Driven iOS Development with Swift 4

by Dominik Hauser

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

Book cover: Working Effectively with Legacy Code

Working Effectively with Legacy Code

by Michael Feathers

This book taught me how to break the cycle of fear with approaching legacy code: “I can’t refactor without tests, but I can’t add tests without refactoring.” ​The author defines “legacy code” as any code without unit tests.

Book cover: xUnit Test Patterns

xUnit Test Patterns: Refactoring Test Code

by Gerard Meszaros

​This is the Unit Testing Bible. A wealth of information on how to write, organize, and refactor test code.