An updated version of this page can be found here.
Language Specific
On the whole, I try to avoid books that are technology specific, preferring instead books that espouse principles and general techniques. The reason for this bias is that specifics tend to solve individual problems and tend date very quickly, whereas generalisations stand the test of time and apply to a multitude of situations. Nevertheless, there are times when you need to get down to the nitty-gritty. The following books have helped me to do so:
- Javascript: The Good Parts (Crockford)
- VB.Net Language in a Nutshell
- C# in Depth (Jon Skeet)
- SQL Server 2000 Programming (Robert Vieira)
General Development
- Code Complete: A Practical Handbook of Software Construction (Steve C. McConnell)
- The Mythical Man Month and Other Essays on Software Engineering (Fred Brooks)
- Rapid Development: Taming Wild Software Schedules (Steve C. McConnell)
- Head First Design Patterns (Eric Freeman et al)
- Design Patterns: Elements of Reusable Object-Oriented Software (Gamma et al)
- Patterns of Enterprise Architecture (Martin Fowler)
- Refactoring: Improving the Design of Existing Code (Martin Fowler)
Usability
- Don’t Make Me Think (Steve Krug)
- The Design of Everyday Things (Donald Norman)