Reading

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

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

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

1 thought on “Reading

Leave a Reply

Your email address will not be published. Required fields are marked *