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.
A handbook for applying Extreme Programming (XP). XP is the foundational agile approach focusing on technical practices.
This book gave me a solid foundation. Don’t be put off by the “C#” in the title. This is good, good stuff.
A practical guide to technical agile practices.
I thought my code was already clean. Then I read this book, and it helped make my code so much cleaner.
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.
You can’t claim expertise in OOP without being familiar with this book.
This book explores Object Oriented Design (OOD). Can you shape your code to express your domain?
An effective technique for tackling multi-step refactoring.
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
How to refactor towards a pattern, and also away from a pattern.
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.
Don’t just read this; actually work through the example yourself.
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.
This is the Unit Testing Bible. A wealth of information on how to write, organize, and refactor test code.