Software engineer reading list: My favourite books about programming
Reading books is one of the best ways to improve your craftsmanship and to become a better software developer. This is a continuously updated list with my favourite programming books, sorted by topic. I link to the ebook version where possible but most books should be available made from dead trees as well.
Architecture & System Design
How to build reliable software that works well.
- Release It! by Michael T. Nygard
- The Architecture of Open Source Applications by Amy Brown
- The Architecture of Open Source Applications, Volume II by Amy Brown
- The Performance of Open Source Applications by Tavish Armstrong
Craftsmanship
Books about best practices, code quality and professionalism. Every single one of these books is fantastic and I got so much out of them. If you don’t know which area to focus on first then start here.
- Clean Code by Robert C. Martin
- Team Geek by Brian W. Fitzpatrick
- The Clean Coder by Robert C. Martin
- The Passionate Programmer by Chad Fowler
- The Zen Programmer by Christian Grobmeier
- HBR’s 10 Must Reads on Managing Yourself
- Better: A surgeon’s notes on performance by Atul Gawande
- Code Complete by Steve McConnell
Programming Languages
Books about specific programming languages that I enjoyed. There’s often free resources available online but sometimes it’s nice to just buy a book that takes you through many aspects of a language. Some of these books are great reads even if you’re not interested in the language specifically, as they teach you important universal concepts.
Haskell
- Learn You a Haskell for Great Good! by Miran Lipovača
- Parallel and Concurrent Programming in Haskell by Simon Marlow
JavaScript
- Effective JavaScript by David Herman
- JavaScript: The Good Parts by Douglas Crockford
Python
- Writing Idiomatic Python by Jeff Knupp
- Effective Python by Bret Slatkin
- Python Cookbook, 3rd Ed. by David Beazley and Brian Jones
- Two Scoops of Django by Daniel and Audrey Roy Greenfeld
- Fluent Python by Luciano Ramalho
- Automate the Boring Stuff with Python by Al Sweigart
Scala
- Programming in Scala by Martin Odersky
Interviews & Hiring
These books work both ways. If you’re trying to be hired as an engineer or hiring others then you can learn a lot from them.
- Elements of Programming Interviews (Python Ed.) by Aziz, Lee and Prakash
- Cracking the Coding Interview by Gayle Laakmann McDowell
- Programming Interviews Exposed by John Morgan
Leadership & Managing developers
These are useful even if you’re not in a leadership position. They’ll help you understand your manager better and will make you a more effective communicator.
- Managing Humans by Michael Lopp
- Leading Snowflakes by Oren Ellenbogen
- How to Win Friends & Influence People by Dale Carnegie
- It’s Not All About Me by Robin Dreeke
CompSci fundamentals, algorithms, and math
This stuff is important. Languages and frameworks come and go but the foundations remain largely static. Re-visit these every once in a while.
- The Algorithm Design Manual by Steven S. Skiena
- Algorithms by Dasgupta, Papadimitriou, and Vazirani
- Introduction to Algorithms by Thomas H. Cormen
- Concrete Mathematics by Ronald L. Graham
Postmortems
The best software engineering war stories around. I get inspired by reading about successful or failed software projects that others have worked on. These books let you learn from the experiences and careers of some of the best people in the field.
- Coders at Work by Peter Seibel
- FoxTales by Kerry Nietz
- Masters of Doom by David Kushner
- Postmortems from Game Developer by Austin Grossman
- Showstopper by G. Pascal Zachary
- The Future Was Here: The Commodore Amiga by Jimmy Maher
- The Making of Karateka by Jordan Mechner
- The Making of Prince of Persia by Jordan Mechner
Writing
Being able to communicate succinctly in writing is often more important than raw technical ability. Especially if you want to convince others. These books have helped me to structure my thinking and improved my English. Especially if English is your second language like it is for me this is an area you should focus on.
- On Writing Well by William Zinsser
- Oxford Guide to Plain English by Martin Cutts
- Writing for Computer Science by Justin Zobel