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. Some chapters are written by other folks, who are fellow coaches at Industrial Logic.

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. By the founder & CEO of Industrial Logic.

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.