As a person who loves checking off items in ‘to-do’ lists and checklists, I’ve always liked books that have a list of rules/principles. Hence books like Effective Java, 201 Principles are the ones that come to mind when I think of a reading list of books related to Software Development.
Software Development, like other engineering disciplines, is fulfilling when executed within the frameworks of principles laid out by experts in the past. Choice of wrong architecture, wrong coding practices, even wrong names, give a lot of grief to people who have to debug production issues or maintain the systems. Many times, it is much simpler to rewrite the entire application than do patches on top of badly written software. While dealing with production issues is when one always wishes that people were better informed on basic principles and thought through things. DRY (Don’t Repeat Yourself), SOLID (Single Responsibility, Open/Closed, Liskov Substitution, Interface Segregation, Dependency Inversion) and KISS (Keep it Simple, Stupid) are principles that everyone should live by. The best practical guide to Software Development is surely Code Complete 2 by Steve McConnell.
Books with Lists
Anyway, the top books with lists that I’d recommend are
- Effective Java by Joshua Bloch
- 201 Principles of Software Development by Alan M. Davis
- Programming Pearls by Jon Bentley
- 55 Facts and Fallacies of Software Engineering by Robert L. Glass
- Design Patterns by GoF
201 principles may have many principles that are dated, but many more are super relevant today. We’re now in the ‘no-code’ development age where a lot of user-facing applications get created by dragging and dropping widgets from a UI. Also a lot of boilerplate code is written by the machine. So, one would hope that the actual code itself is modularized, clean and easier to find troublesome spots. Maybe we’ll enter into a phase where people cannot write bad code. Like Java took away the memory management headache from simple-to-medium applications forever. One had to still think of garbage collection and JVM tuning for applications that handled millions of requests. But most people don’t operate in the ‘league of big wigs’ at all. (Haha, was about to say ‘league of big boys’!)
A couple of years back, I’d asked DB, a senior executive that I respect a lot, to recommend a book based on his vast experience. He suggested reading any book by Robert C Martin (Uncle Bob). Yup, his books are great. Clean Code, Clean Architecture, Clean Coder are excellent reads and good reference materials.
Uber List
Here is my uber list that I hope to revisit to update
- Working Effectively with Legacy Code by Michael Feathers
- Refactoring: Improving the Design of Existing Code, 2nd Edition by Martin Fowler
- Code Complete: A Practical Handbook of Software Construction, 2nd Edition by Steve McConnell
- Clean Code: A Handbook of Agile Software Craftsmanship by Robert C. Martin
- The Mythical Man-Month: Essays on Software Engineering by Frederick P. Brooks
- Introduction to Algorithms, 3rd Edition by Thomas H. Cormen, Charles E. Leiserson, Ronald L. Rivest, and Clifford Stein
- Programming Pearls, 2nd Edition by Jon Bentley
- The Pragmatic Programmer: Your Journey To Mastery, 2nd Edition by David Thomas, Andrew Hunt
- Peopleware: Productive Projects and Teams by Tom DeMarco and Timothy Lister
- Design Patterns: Elements of Reusable Object-Oriented Software by Erich Gamma, Richard Helm, Ralph Johnson and John Vlissides
- Regular Expressions Cookbook 2nd Edition by Jan Goyvaerts, Steven Levithan
- CODE: The Hidden Language of Computer Hardware and Software by Charles Petzold
I would have added the famous The Art of Computer Programming by Donald Knuth but I haven’t read the series myself. Bill Gates himself mentioned this as an essential reading for programmers and it does figure in all the lists of great books on software development.
Though I mentioned Introduction to Algorithms by CLRS above, the book is great as a reference and not for reading through fully in a short span of time. I’d really recommend Algorithms by Dasgupta, Papadimitriou & Vazirani or Algorithms to Live By by Brian Christian & Tom Griffiths or Tim Roughgarden’s Algorithm course on Coursera. Robert Sedgewick’s Algorithms is great if you’re looking for code in Java. One of my Graduate projects was in Rabin-Karp hashing algorithm and I relied entirely on the substring search section of the book. Sections 5.3 (substring search) and 5.5 (compression) are an excellent read for anyone who is new to those concepts. The fact that I remember the sections and can visualize the black and red text on the pages, itself is a testament to the book.
I put Working Effectively with Legacy Code as #1 because that is what most software engineers do. I’ve been involved in huge re-engineering efforts of legacy code to new stack multiple times. There are many excellent books that have essays with inputs from multiple experts. Best Software Writing by Joel Spolsky and Coders at Work: Reflections on the Craft of Programming by Peter Seibel, come to mind.