Essential Reading
The following is a list of books that have benefitted me as a professional developer. I don’t claim to have read every word in these books, but rather that each of them has been beneficial.
Language Specific Books
Principles stand the test of time and apply to a multitude of situations. For this reason, I avoid books that are technology specific, preferring instead books that espouse principles and general techniques.
Nevertheless, there are times when you need to get down to the nitty-gritty. The following books have helped me to do so:
- C# in Depth (Jon Skeet)
- VB.Net Language in a Nutshell (Steven Roman, Ron Petrusha and Paul Lomax)
- Professional SQL Server 2000 Programming (Robert Vieira)
- Javascript: The Good Parts (Douglas Crockford)
General Coding
- Code Complete: A Practical Handbook of Software Construction (Steve C. McConnell)
- Clean Code: A Handbook of Agile Software Craftsmanship (Robert C. Martin)
Design and Patterns
- Head First Design Patterns (Eric Freeman et al)
- Design Patterns: Elements of Reusable Object-Oriented Software (Gamma et al)
- Patterns of Enterprise Application Architecture (Martin Fowler)
- Refactoring: Improving the Design of Existing Code (Martin Fowler)
Agile Development
- Rapid Development: Taming Wild Software Schedules (Steve C. McConnell)
- Practices of an Agile Developer (Venkat Subramaniam and Andy Hunt)
- Lean Software Development: An Agile Toolkit (Mary and Tom Poppendieck)
Usability
- Don’t Make Me Think (Steve Krug)
- The Design of Everyday Things (Donald Norman)
Other Programming Books
- Coders at Work (Peter Seibel)
- Getting Real (37 Signals)
- The Mythical Man Month and Other Essays on Software Engineering (Fred Brooks)
Non-Programming Books
- The 7 Habits of Highly Effective People (Stephen R. Covey)
- First Things First (Stephen R. Covey and A. Roger Merrill)
- Getting Things Done: How to Achieve Stress-free Productivity (David Allen)
- How to Win Friends and Influence People (Dale Carnegie)
- Gödel, Escher, Bach: An Eternal Golden Braid (Douglas Hofstadter)
- Surely You’re Joking Mr Feynman (Ralph Leighton, Richard P. Feynman and Edward Hutchings)
Recommendations
The following books were recommended by StackOverflow readers, but I am yet to read them:
- The Pragmatic Programmer
- Structure and Interpretation of Computer Programs
- The C Programming Language (Kernighan and Ritchie)
- Introduction to Algorithms (Cormen, Leiserson, Rivest & Stein)
- The Art of Computer (Programming by Donald Knuth)
- Compilers: Principles, Techniques and Tools (Alfred V. Aho, Ravi Sethi and Jeffrey D. Ullman)
- Effective C++
- More Effective C++
- CODE (Charles Petzold)
- Programming Pearls (Jon Bentley)
- Working Effectively with Legacy Code (Michael C. Feathers)
- Peopleware (Demarco and Lister)
- Effective Java 2nd Edition
- The Little Schemer
- The Seasoned Schemer
- Why’s (Poignant) Guide to Ruby
- The Inmates Are Running The Asylum: Why High Tech Products Drive Us Crazy and How to Restore the Sanity
- The Art of Unix Programming
- Test-Driven Development: By Example (Kent Beck)
- Agile Software Development, Principles, Patterns, and Practices (Robert C. Martin)
- Domain Driven Designs (Eric Evans)
- Modern C++ Design (Andrei Alexandrescu)
- Best Software Writing I (Joel Spolsky)
- The Practice of Programming (Kernighan and Pike)
- Pragmatic Thinking and Learning: Refactor Your Wetware (Andy Hunt)
- Software Estimation: Demystifying the Black Art (Steve McConnel)
- The Passionate Programmer (My Job Went To India) (Chad Fowler)
- Hackers: Heroes of the Computer Revolution
- Algorithms + Data Structures = Programs
- Writing Solid Code
- Foundations of Programming (Karl Seguin)
- Computer Graphics: Principles and Practice in C (2nd Edition)
- Thinking in Java (Bruce Eckel)
- The Elements of Computing Systems
- Refactoring to Patterns (Joshua Kerievsky)
- Modern Operating Systems (Andrew S. Tanenbaum)
- The Annotated Turing
- Things That Make Us Smart (Donald Norman)
- The Timeless Way of Building (Christopher Alexander)
- The Deadline: A Novel About Project Management (Tom DeMarco)
- The C++ Programming Language (3rd edition) (Stroustrup)
- Computer Systems – A Programmer’s Perspective
- Agile Principles, Patterns, and Practices in C# (Robert C. Martin)
- Growing Object-Oriented Software, Guided by Tests
- Framework Design Guidelines (Brad Abrams)
- Object Thinking (Dr. David West)
- Advanced Programming in the UNIX Environment (W. Richard Stevens)
- Hackers and Painters: Big Ideas from the Computer Age
- The Soul of a New Machine (Tracy Kidder)
- CLR via C# (Jeffrey Richter)
- Design Patterns in C# (Steve Metsker)
- Zen and the Art of Motorcycle Maintenance (Robert M. Pirsig)
- About Face – The Essentials of Interaction Design
- Here Comes Everybody: The Power of Organizing Without Organizations (Clay Shirky)
- The Tao of Programming
- Computational Beauty of Nature
- Writing Solid Code (Steve Maguire)
- Philip and Alex’s Guide to Web Publishing
- Object-Oriented Analysis and Design with Applications (Grady Booch)
- Effective Java (Joshua Bloch)
- Computability (N. J. Cutland)
- Masterminds of Programming
- The Tao Te Ching
- The Productive Programmer
- The Art of Deception (Kevin Mitnick)
- The Career Programmer: Guerilla Tactics for an Imperfect World (Christopher Duncan)
- Paradigms of Artificial Intelligence Programming: Case studies in Common Lisp
- Masters of Doom
- Pragmatic Unit Testing in C# with NUnit (Andy Hunt and Dave Thomas with Matt Hargett)
- How To Solve It (George Polya)
- The Alchemist (Paulo Coelho)
- Smalltalk-80: The Language and its Implementation
- Writing Secure Code (2nd Edition) by Michael Howard
- Introduction to Functional Programming (Philip Wadler and Richard Bird)
- No Bugs! (David Thielen)
- Rework (Jason Freid and DHH)
- JUnit in Action
One thought on “Reading”