Here’s a list of (mostly) software-related books I love. None of them are a big secret – they’re all written by people that go to the same conferences you and I go to, published by the typical software book publishers, and sold in all popular bookstores (except for the Real Options comic book).
I’ve kept the descriptions short and sweet mostly for pragmatic reasons, but also because I’m not trying to convince you to read any of these. Rather I’m simply offering them up as a bookshelf that you might peruse to see what strikes your fancy. I consider all of these to be “the best” books or “my favorite” books. That is, if you were pull any of these books off of my bookshelf I would smile and say “nice choice.”
After forming the list I grouped them into categories that made sense given the selection of books. Inside each group I’ve listed them by the date they were published. When reading any book, technical texts in particular, it’s important to take note of when the book was written and published. Sometimes readers criticize a work for its ideas “being a bit out of date.” That might be an accurate criticism of a book published in the late 90’s, but certainly an unfair one! I’m also a big fan of reading several books about the same topic at once, and I like knowing where they each fit into the conversation.
I’ve included links to freely-available online versions if I know of them, otherwise the links will take you to Amazon. If you know of a freely-available legal copy of any of the books here, please email me with the information and I will update it on this page.
Non-software-specific books
I’m starting off the list with these two books because they’re the only two non-software-specific books on here. Pragmatic Thinking and Learning will help you digest this reading list (or any other), and Fearless Change will help spread new ideas you learn to your workpace.
Mary Lynn Manns
September 2004
What it’s about
Creating positive change within yourself, team, and workplace
Why I love it
You’d think that sharing awesome new ideas with people would be welcome and easy, but it turns out that a lot of people hate change. This book has helped me fight the good fight numerous times.
Andrew Hunt
November 2008
What it’s about
Strategies for learning, and maintaining a sharp mind
Why I love it
It gives some insight into cognitive theory, and is packed full of strategies on how to learn effectively by retaining information and creating learning curriculums. This continues the PragProg theme of being responsible for your career and personal growth. It serves as a great starting point for learning about learning.
Agile
chromatic
June 2003
What it’s about
A small handbook of XP principles and practices
Why I love it
It’s a super handy reference for XP ideas and great for giving to people to give them a first exposure to XP
Kent Beck & Cynthia Andres
November 2004
What it’s about
Effective, sustainable, ethical software development
Why I love it
I spotted the first edition of this book when I was 15 and was immediately drawn to it because I though “Extreme Programming” sounded cool. It was way over my head at the time but it did introduce me to unit testing which I was able to apply right away to my little IRC client that I was building. Through the years I continue to go back to it and am always impressed with the focus on human interaction and behavior. It’s an important work on ethical software development.
Robert C. Martin
July 2006
What it’s about
Pragmatic agile development
Why I love it
It gives a good rundown of the different practices you might use in an agile software project, and goes into great detail on important design patterns and principles for building high-quality software systems. As far as I know this is the first published reference to SOLID.
Alistair Cockburn
October 2006
What it’s about
An analysis of what makes software development tick, and how to arrive at an effective development model for your team and organization
Why I love it
This book taught me how to think about software development methodologies instead of simply how to follow one. This is another book that is focused squarely on the human element of software development, which is by far the most important aspect.
Business / management / less-technical
Gerald M. Weinberg
January 1986
What it’s about
Getting paid to give advice
Why I love it
Consulting can be like trying to navigate around Cape Fear. This book serves as lighthouse, map, and tidetables…but it can’t change the weather.
Fred Brooks
August 1995
What it’s about
The realities of managing software projects
Why I love it
People screw up software projects in a lot of ways, and this book covers nearly every one of those in some form or another. “Adding manpower to a late software project makes it later,” “no silver bullet,” and the temptation and tragedy of software rewrites are all in this book. It’s a set of essays that you can read one at a time.
Tom DeMarco
February 1999
What it’s about
How humans interact on software projects
Why I love it
It covers serious topics in a light-hearted manner, and challenges a lot of the “established wisdom” about managing software projects.
Luke Hohmann
February 2003
What it’s about
Bridging the gap between business and technology
Why I love it
It turns out that running a software business requires way more expertise than just writing good code. This is basically a handbook on running a software company.
Alan Cooper
March 2004
What it’s about
Creating technology that humans love to use
Why I love it
This got me thinking about software from the user’s perspective, which I had never really done before. I consider this another important work on ethical software development.
Chris Matts
2009
What it’s about
An economic approach to software development
Why I love it
This book opened my eyes to the reality that software projects are economic problems. It’s a quickly-read comic book that will change the way you think about planning software development.
OOP & Design Patterns
Richard Helm, Erich Gamma, John Vlissides and Ralph Johnson (“Gang of Four”)
November 1994
What it’s about
Designing object-oriented software
Why I love it
I never thought about design before this book, I just wrote code and tried to make it work. The GOF book introduced me to the idea of object-oriented design and gave me plenty of ideas for writing understandable, maintainable code.
Meilir Page-Jones
August 1996
What it’s about
How OOP is supposed to work
Why I love it
Wrapping your code in objects doesn’t necessarily mean you’re “doing OO” and certainly doesn’t mean you’re doing it effectively or deriving the benefits of a well-implemented OO approach. I think this is the most important book when it comes to conceptualizing OO programming.
Martin Fowler
October 1996
What it’s about
Domain-specific patterns that show up in all types of applications
Why I love it
The world doesn’t need any more accounting software, yet on nearly every project I’ve worked on I’ve been tasked to build at least a little bit of accounting functionality. This book contains an in-depth analysis of accounting patterns (how exciting!), as well as patterns for measurements, planning, and contracts. If it sounds a bit dry it’s because it is, but it is still a great reference for working on these sorts of problems. Also with a bit of imagination you’ll start to see how these patterns appear all of your code even if it’s not in the same domain language as this book, and you can draw on it for inspiration. This book introduced me to the layered architecture.
Kent Beck
October 1996
What it’s about
How to write good code
Why I love it
It manages to strike a fine balance between telling me how to write code and how to think about writing code. Every pattern in this book presents an example of good code and explores what makes it good.
Matthias Felleisen and Daniel P. Friedman
December 1997
What it’s about
An approachable introduction to object-oriented programming and design patterns
Why I love it
It’s written by the same folks and in the same style as “The Little Schemer.” It introduces some of Java’s basic features, and covers object-oriented theory and design patterns in a fun, approachable manner.
Martin Fowler
July 1999
What it’s about
How to safely take any bit of code and rework it so it makes sense to you
Why I love it
It’s one of the best-written books that I’ve read and has stood the test of time. I still refer to it when I have a design problem and am not quite sure what to do.
Bertrand Meyer
March 2000
What it’s about
The nuts and bolts of writing robust applications in an object-oriented style
Why I love it
It convinced me that object-oriented systems can be every bit as rigorous and provably correct as functional systems. Half of SOLID is from this book.
Chamond Liu
April 2000
What it’s about
An introduction to smalltalk that quickly moves onto object-oriented design principles
Why I love it
This book made smalltalk accessible to me and improved my thinking about object-oriented design in general to apply to other programming languages.
Jill Nicola, Mark Mayfield, Mike Abney
October 2001
What it’s about
Organizing logic in an object-oriented software system
Why I love it
It completely changed the way I think about object-oriented design. I’ve used the patterns in this book on several projects, and the parts of code that use these patterns are by far my favorite to work with. It’s the most worn out book on my shelf.
Rebecca Wirfs-Brock
November 2002
What it’s about
The fundamentals of object design
Why I love it
I think this is the first book I read on object design, and it really helped me start to understand the difference between wrapping code in objects and object-oriented programming. It provides a straightforward methodology for analyzing problems and breaking them down into OO solutions.
Eric Evans
August 2003
What it’s about
Focusing on the business logic in software
Why I love it
The second most important lesson I’ve learned about software development is that software is a knowledge acquisition process (the most important is that it’s always all about people). This book started me on my journey towards understanding how we learn in software projects and what we do with that knowledge. It argues that understanding the business logic of software projects is so important that you should make every effort to keep those concerns separate from all other concerns. It covers how to have conversations with domain experts, analyze problems, and ultimately implement them in code. I’ve also given away several copies of this book, and it served as the basis of my Domain-Driven Rails talk at Aloha on Rails (video) and Domain-Driven Rails Redux at RailsConf 2010 (slides).
David West
February 2004
What it’s about
Understanding a software system’s behavior and organizing responsibilities
Why I love it
At this point in life I’m better served by books that give me a new way of thinking about things rather than just telling me how to do something. This is that book, for OOP.
Joshua Kerievsky
August 2004
What it’s about
Moving code towards and away from design patterns
Why I love it
I definitely became “patterns happy” when I read the gang of four book. This book helped me identify the patterns hidden in my code and make them explicit, rather than try to force design patterns on my code. It was a critical book in my understanding of evolutionary design.
Alan Shalloway & James R. Trott
October 2004
What it’s about
Object-oriented design with a focus on design patterns
Why I love it
It taught me how to think about object-oriented design and design patterns, not just tell me what they are.
Kent Beck
November 2007
What it’s about
How to think about and write good code
Why I love it
It’s the same idea as his Smalltalk Best Practice Patterns, only in Java and with an extra decade of experience
Russ Olsen
December 2007
What it’s about
Structuring Ruby code
Why I love it
It’s the first book I read that really focused on beauty as a desirable end goal when writing code.
Automated Testing / TDD
Kent Beck
November 2002
What it’s about
An introduction to TDD
Why I love it
This is the book that started it all. Whenever I learn a new language or test framework I go through the examples in this book.
Dave Astels
July 2003
What it’s about
Using TDD to write real software
Why I love it
After I read TDD by example I wondered, “where do I go from here?” This book was the answer for me. It builds on Kent’s work and builds a working, useful application start to finish using TDD, with a focus on refactoring. It also introduced me to the idea of “programming by intention” which has served me well.
J B Rainsberger
July 2004
What it’s about
Practical considerations when writing automated programmer tests
Why I love it
The recipes in this book have one underlying theme: how to think about automated testing. Even if you skip over the huge section on J2EE, you’ll get your money’s worth from the chapter on testing design patterns and appendix of essays.
Every recipe is presented in a “Problem, Background, Recipe, Discussion” format, making it a very pragmatic, approchable book and another one of those books you can digest in chunks.
Michael Feathers
October 2004
What it’s about
How to confidently make changes to gnarly, untested codebases
Why I love it
Life sucks when you don’t have automated tests to back you up. Follow the strategies in this book and you’ll eventually turn a codebase you hate into something enjoyable to work on. Note: It’s hard work.
I’ve given away more copies of this book than any other. It inspired my Working Effectively with Legacy Rails Code talk at Scotland on Rails 2009 (video) that I expanded with BJ Clark at RailsConf 2009 (slides)
Gerard Meszaros
May 2007
What it’s about
How to write and refactor your way to a clean test suite
Why I love it
I’ve worked on many software projects where the team was dedicated to refactoring and keeping their codebase clean, and the test suite was a horrific mess. I never understood why. Then this book came out and I realized that it filled a hole: there simply was no literature on what makes for clean test suites prior to this book. There are different forces at play in your test suite than your production code, so the way you keep it clean necessarily differs from time to time. If you’ve wondered how to write a particular test, you’ll find some good hints in this book.
Steve Freeman & Nat Pryce
October 2009
What it’s about
How to use TDD to build a software system from the ground up and continually refine its design to incorporate new understanding and keep things simple
Why I love it
Earlier books showed you how to do TDD. This is the book that shows you how effective TDD helps you write good software.
General Programming
Andrew Hunt & Dave Thomas
October 1999
What it’s about
Crafting a career as a software developer
Why I love it
It introduced me to several important programming practices and served as a starting point for deeper research and explanation. It gave me practical ideas on how to be responsible for my growth as a programmer. To this day I think it is the most beautifully constructed, organized software-related book that I’ve read.
Steve McConnell
July 2004
What it’s about
Constructing robust software applications
Why I love it
I call it “Object-Oriented Software Construction, Millenium Edition.” It’s not an OO book, but it’s in the same vein as OOSC in that it provides a detailed approach for constructing software that can withstand users and technology.
Dave Thomas, Chad Fowler, Andy Hunt
October 2004
What it’s about
Our most favoritest programming language ever
Why I love it
This might be the best language-specific book I’ve ever read. I remember it being so approachable, and it got me excited about programming again. Nearly every page led me to yell “no way!” and go experiment. Had I not encountered this book, I may not have pursued a career as a programmer.
There’s a 1.9 edition that I’ve not read yet.
David A. Black
May 2006
What it’s about
An in-depth look at Ruby’s powerful features, with a focus on how they’re used to implement Rails
Why I love it
This book really opened my eyes to what you can do with Ruby. I had dug into the Rails source code but found a lot of what looked to me like magic. Ruby for Rails explained the magic and inspired me to do some crazy stuff with Ruby.
Robert C. Martin
August 2008
What it’s about
Developing the habit of writing the best code you’re capable of, and constantly raising the bar
Why I love it
This is a great “15 minutes a day” book. It’s basically a list of of tricks and rules of thumb that old people like Bob wish young people like me knew. You can literally open the book to any page, read for 15 minutes, and come away with something to use in your work that same day.
Robert C. Martin
May 2011
What it’s about
Bob’s treatise on what it means to be a professional programmer
Why I love it
Whereas Clean Code is all about the nitty gritty details of writing and thinking about code, The Clean Coder takes you up 10,000 feet and advises you on how to approach your career and growth as a programmer.
Software Architecture
Martin Fowler
November 2002
What it’s about
Architectural design patterns
Why I love it
Design patterns in day-to-day code is nice, but what about application architecture? The way you divide your app into business logic, infrastructure, and error-handling code has a huge impact on how robust and maintainable your software is. My favorite part of reading this book was noticing how many ideas in Rails’ architecture came from this book (and how other parts of Rails could be improved!)
Gregor Hohpe & Bobby Woolf
October 2003
What it’s about
How to connect large software systems in a loosely-coupled manner
Why I love it
If I’m looking to split an application into services, expose an API, or consume an API, I consult this book for ideas, and it delivers.
Amy Brown & Greg Wilson
June 2011
What it’s about
This is an anthology of essays written by open source software authors about software packages that you know and love (or hate)
Why I love it
It provides a pretty in-depth look at a wide variety of open source projects, in which the authors of those projects tell you funny stories, discuss the historical context of the software, and present some of their major challenges and how they solved them. If you want to understand how productive programmers make pragmatic decisions to ship useful software, this is a great starting point.
Functional Programming
Matthias Felleisen, Daniel P. Friedman and Duane Bibby
December 1995
What it’s about
Recursion
Why I love it
It’s written in an extremely pleasant socratic dialogue style and introduced me to scheme. It focuses on breaking down problems into recursive solutions which can yield extremely elegant results.
Matthias Felleisen, Daniel P. Friedman and Duane Bibby
December 1995
What it’s about
Thinking about computation
Why I love it
It introduced me to important functional programming concepts as well as computation concepts in general that I’ve been able to apply in my work every day since I read it.
Harold Abelson, Gerald Jay Sussman and Julie Sussman
August 1996
What it’s about
The theory and practice of computer science
Why I love it
This is one of the absolute classics, and working through it gave me a solid foundation for reasoning about computer programs. The chapter on implementing a scheme interpreter in scheme blew my mind and excited my imagination.
Paul Hudak
February 2000
What it’s about
Solving programming problems using functional thinking
Why I love it
My favorite thing about this book is how the author takes multiple approaches when solving problems. That’s the way most good programmers I know work – they try out a few different things and pick the best one. It’s refreshing to see a book advocate that sort of work ethic.
Peter Seibel
April 2005
What it’s about
How to build useful programs using Common Lisp
Why I love it
It took me a while to wrap my head around some of the stuff in this book but after typing in every line of code and studying it I started to come to grips with Common Lisp and felt comfortable writing programs on my own with it. It also has a chapter on building a TDD framework, and you know I’m a sucker for that.
Daniel P. Friedman
October 2005
What it’s about
Merging functional and logic programming
Why I love it
It introduced me to logic-based programming in the style that I loved about The Little Schemer and The Seasoned Schemer
Doug Hoyte
April 2008
What it’s about
Hardcore Lisp programming
Why I love it
Section 1.1 is titled “Macros”
Conrad Barski
November 2010
What it’s about
Having fun while learning Lisp
Why I love it
This is probably the most fun I’ve had reading a programming book, and it’s so deep. It starts you off with “so what are these parentheses anyway” and takes you all the way to writing web apps. Along the way you learn all about the features that make Lisp so powerful. Plus, cartoon aliens!
Miran Lipovaca
April 2011
What it’s about
A crash course on functional programming using the purest functional programming language around
Why I love it
“A language that doesn’t affect the way you think about programming, is not worth knowing.” – Alan Perlis
I enjoyed learning about Haskell but it had always been sort of a tough nut for me to crack. This book made it dead easy to start writing simple programs in Haskell explore what makes it such a unique language.
Scaling
John Allspaw
September 2008
What it’s about
Scaling web software, by the guy who kept Flickr.com running while transferring everything over to Yahoo’s datacenters
Why I love it
It’s the nuts and bolts of figuring out how much scale you’ll need to handle and how to actually handle it. Even if you don’t work on something the size of Facebook (cause let’s be real here) there’s a lot of knowledge you can apply to the web app you’re working on. One of the most important points is how to make sure that you plan for the load you’ll actually have and not to waste time building added complexity to handle load you’ll never have.
Martin Abbott & Michael Fisher
December 2009
What it’s about
Scaling people, process, and technology
Why I love it
It’s a higher level book that points out that even the best technology in the world can’t save an organization from itself if they don’t figure out how to manage people properly. In that sense it’s 2/3 organizational scaling and 1/3 technical scaling.
Martin Abbott & Michael Fisher
May 2011
What it’s about
Everything you need to consider when building web applications with scalability in mind
Why I love it
Every application has different forces acting on it that help or hinder the scalability. This set of “rules” teaches you how to uncover those forces and deal with them. It’s not just about implementing for scalability, but also covers how to plan your development process to account for discovering scaling requirements, and what to do once you’ve actually shipped the thing.