For me, “Refactoring” was the best book I ever read, more because of the time I read it at then the actual applicability of the content to what I did back then (study). It showed me that code is nothing static. It is written. And then rewritten. Changed for new needs. It’s a rather flexible thing.
I would like to add two texts that helped me a lot:
I like how it deconstructs a lot of simple arguments that are often thrown around in programming language discussions (e.g. the point that most languages do support constructs similar to eval, which is said to be evil). The text isn’t perfect, but it gave me a lot of feel for programming language discussions.
Less because of REST being an important architectural style for a while, but because of the way he describes his thinking when constructing REST as a set of voluntary constraints to enable reasoning about the system. It still is the definition of architecture for me: voluntary restraint to enable reasoning.
I’m very sad how often REST is used without reading up on this very understandable piece of thought.
The best parts:
An architectural style is a coordinated set of architectural constraints that restricts the roles/features of architectural elements and the allowed relationships among those elements within any architecture that conforms to that style.
(The markdown parser has a bug: in the source, the items are numbered correctly with 1 and 2)