I am an avid reader. I don't really enjoy much fiction, but I love computer science and technology books. I have a bit of an ...erm... addiction (some would say) to Amazon Marketplace. If we take a trip in the 'way back' machine to 2001ish, we will see a younger (still in High School) Steve, delighted to receive his first Amazon Marketplace shipment: Advanced Visual Basic 6: Power Techniques for Everyday Programs and Effective Visual Basic: How to Improve your VB/COM+ Applications. Once you have stopped laughing at the thought of "Effective" or "Advanced" Visual Basic, please continue
Here are two of my bookshelves now. I can't honestly claim that I have read all of them cover to cover, but I always read at least a few chapters of each, and note which sections I want to come back to. Many, though, I have read all the way through-- for example, if you haven't read Brian Goetz's Java Concurrency in Practice, then you are missing out!
Here are some of my favorite books:
- Effective Java by Josh Bloch. A collection of pragmatic patterns, and more importantly sound reasoning as to why they are recommended.
- Java Concurrency in Practice - excellent overview of the two most important aspects of multi-threaded programming: memory consistency and mutual exclusion. People seem to forget about the first one. Once you finish this book, please go read William Pugh's information on JSR 133. After that if you still don't understand what volatile really is, then repeat.
- Implementation Patterns by Kent Beck. He describes the book as a companion to Fowler's canoncial "Refactoring" text. Implementation Patterns focuses on the 'small' decisions that we make every day as it pertains to design, code organization, and getting all of the '-ilities' working for us. Reading this was like re-living the first few years of professional Java development-- Kent just did a good job 'formalizing' a vocubulary with which to discuss and evaluate these various 'design pressures' that enter our mind as we code.
Real World Java EE Patterns by JEE guru Adam Bien. I found this book wonderful. In particular, his trade off analysis that accompanies each pattern is an excellent way to learn how he reasons about design.
- The Pragmatic Programmer - this is a famous book and certainly worth the read. I think it's a good litmus test for oneself. I read this once before I started my career and found that I learned a ton. I thought all of the little gems of advice were new and useful. I re-read (or skimmed) this recently, and found myself going "yep, I remember learning that the hard way". I kind of view this as a way to guage the efficiency of the environment within which you work. I have been lucky to work in an environment that properly incentivized writing good software. Thus, I learned these lessons quickly and efficiently as part of my day to day work. If you work in a lazy environment, you may never learn these lessons.
- Beautiful Code - this collection of essays is a great read. It's goal (and it succeeds) is imparting how great developers think. These lessons help 'shape' the way in which we approach problem solving. The entire "Beautiful" series is wonderful. I have read them all, except the new "Beautiful Security".
- Java Generics - I am not recommending this book, unless you are (a) curious about some of the 'exotic' features of generics, (b) enjoy the theoretical aspects of language design (reification, contra/covariance, etc.) , or (c) want to understand the reasoning behind the design decisions that were made by the expert group.
SQL Server 2008 Query Performance Distilled - this is my favorite pick for SQL Server optimization. Of course Delaney's Inside SQL volume on the matter is great too, but Distilled is a little bit more bang for your buck. I found more useful information crammed into a smaller text. Once you read this (and all of the Inside SQL Server series) then you can graduate to Craig Freedman's Blog