Agile Estimation and Planning (Mike Cohn - http://www.amazon.com/Agile-Estimating-Planning-Mike-Cohn/dp/0131479415): this book took me from being a person who knew how to setup an Agile team and practice Agile development, to - as the cover says - being someone who can plan and estimate relatively large software development projects using Agile methods. I've used the approach Mike lays out "in anger"; it works - superbly.
Mike has published an accompanying book on User Stories, which I have not read, but I imagine would compliment this book nicely.
Basically, if you want to understand how to successfully extend your Agile practice from being a way to manage programming on a day-to-day (or Sprint-to-Sprint) basis - and to develop the maturity of your Agile approach - then this book is like a step-by-step "how to". The guidelines are easy to follow, and to me at least, everything just makes sense.
Caveat emptor though; I imagine the approach would be harder to apply in practice - and/or make sense of - to someone who has not practiced Agile development relatively solidly.
Cleverly written, and flows beautifully. This is not a technical manual (although in some editions a manual is included), more like "the story of C". I can see why it is a classic. Aside - this book is where the "hello, world!" program comes from.
Working Effectively With Legacy Code (Michael Feathers - http://www.amazon.com/Working-Effectively-Legacy-Michael-Feathers/dp/0131177052): Again, this is another classic, IMO - and is arguably a bit more practical for most modern programmers than "The C Programming Language".
Feathers defines "Legacy" code as essentially being any code that is untested or currently untestable. Most professional programmers worth their salt will have come across lots of this stuff - in fact, I would hazard a wager that many (most?) coders are in-fact working with legacy code (as Feathers defines it) on a daily basis... Anyway, Feathers introduces us to this notion and then moves on to the thrust of the book; which is to introduce myriad patterns that enable the user to wrap or refactor legacy code in such a way to make it testable.
The book is written in the style of the "Gang of Four" Design Patterns book - there are three sections; the first sets the stage, introducing Michael's reasoning, definitions, and some tools. The second section is scenarios (essentially suggestions as to how to apply patterns to deal with problems, like "My Application Is All API Calls") and the third is a reference for a stack of dependency breaking patterns.
This book in my opinion is great - there should really be a hell of a lot more writing about how to address the problem of refactoring legacy code - after-all, it must be one of the key issues that the software industry faces currently. Perhaps the subject is just not sexy enough. In any case, I think the author does a slick job of "coolifying" the subject matter - and this book in my opinion is a much easier read than Fowler and Beck's "Refactoring".
Also, I like the cover - presumably, it's some sort of timekeeping mechanism...
Goodnight - perhaps I will post some more book reviews soon!