Reading Working Effectively with Legacy Code (Amazon) made me really want to get into something and write some tests. It’s a really actionable book, and I liked how pragmatic it was – focusing on being able to create incremental progress, but balancing that with what you’re aiming towards.
I think a sign of a foundational programming book is how many of these ideas I had absorbed by osmosis and used previously. I definitely learned some things though! And it’s well worth a read if you deal with legacy code (or if you manage teams that do… I think I will be able to ask some better questions now).
My favourite idea or concept in the book was about telling the story of the architecture of your system. How you explain things as simply as you can, it makes you see how things deviate from that explanation – helps you understand what your architecture should be conceptually, and the places where you’re breaking it. This creates clarity around what you should be aiming for, and reduce your edge cases. I liked how practical and social it was, and I’ve found myself using that technique since.