Must Read:
- Agile Principles, Patterns, and Practices in C# by Robert C. Martin - This is the single best programming book I ever read. They say, 'when the student is ready, the teacher appears'.
- Clean Code: A Handbook of Agile Software Craftsmanship by Robert C. Martin - I would read code samples by Robert C. Martin (Uncle Bob) and think, 'How does he write code like that?'. This book shows you exactly how he does it.
- Refactoring: Improving the Design of Existing Code by Martin Fowler -This is a reference you should be using multiple times per day. To improve an existing code base, pick a code smell from the index on the last 2 pages, and go through the code applying the appropriate refactoring everywhere you find the smell.
- Pragmatic Unit Testing in C# with NUnit, 2nd Edition by Dave Thomas & Andy Hunt - If you are new to unit testing and/or test-driven development, this book will help you over the initial learning curve.
- Agile Estimating and Planning by Mike Cohn - If you are as uncomfortable with time-based estimates as I am, this book will be a revelation. Why guess when you can have actual data?
- About Face 3: The Essentials of Interaction Design by Alan Cooper - This book changed the way I think about software. I NEVER used to think about users at all. Now as I use software, I notice all the little things that bother me, and think about how not to inflict the same annoyances on the users of my software.
- Misko Hevery is my new hero. His articles on testability and object-oriented design (OOD) have answered a great number of questions for me.
Recommended:
- Programming Ruby 1.9 by Dave Thomas - I really enjoyed learning about a different type of language than what I normally work in - C#.
- Code Complete 2 by Steve McConnell
- Effective C# by Bill Wagner
- Building Applications and Components with Visual Basic .NET by Ted Pattison & Joe Hummel - Introductory level, but very solid and clear. It is dated since it targets .NET 1.1, but the concepts are still very valid.