I was one of the many people crying out for More Delphi Books, and I am glad to see that recently we have seen new books from Nick Hodges, and from others. Today I'd like to cover the top five non-language-specific general books on programming that I think every developer should read.
1. The Pragmatic Programmer - Andrew Hunt, David Thomas
This collection of snippets of advice is how I came to call myself a "Pragmatic" programmer. I believe there are good principles in the "Agile" movement, but I hesitate to call myself "Agile". I believe the practices in "Scrum" and "XP" can be done, and done well. When I'm part of a team that takes those principles to heart and follows them, I'm happy to follow along too, when it works. But I don't take those monikers for myself, because I see "pragmatic" as the over-arching principle I follow. I do what works, and when it doesn't work, I change it up. This book is chock full of fantastic advice. Some of the "get out there on the Internet and discover new stuff" sounds dated, as the last edition I have of this was updated around 2000, but the principles are timeless. Incidentally my "change it up when it doesn't work" dictum is probably original to XP, and was borrowed by Scrum, and then by agile, so we're all cribbing from XP. Nevertheless, of all the books I have read, there is no book that expresses more about how developers who do great work, and do it with reasonable efficiency work, in my opinion than this book.*
2. Clean Code - Robert C. Martin
Nobody, I mean nobody has written a book that cuts to the heart of modern professional Best Practices than Uncle Bob. Nobody. Uncle Bob first hit my radar when he passionately and carefully expounded the principles of object oriented programming with the SOLID mnemonic. This book goes on to explain what it means to be a real software professional. Yes, you have to unit test. But there's more.
3. Working Effectively with Legacy Code - Michael Feathers
How do I unit test that giant ball of mud that I can't rewrite? This book answers that, and many other burning questions. I have not read any other book that gave me more hope that you can dig out of the holes of technical debt left for you to solve, than this book. Fine, now that you understand the benefits of cohesion and the single-responsibility-principle, the dangers of coupling, and the necessity of proving that your code works by writing code that proves the assertions you wish to believe about your code. Now, how do you work with the code that you have right now, that does not now, and may not ever meet your ideals about Clean Code? This book can help.
4. The Mythical Man Month (and other essays) by Fred Brooks
No better book about the work that programmers do, the way we run software projects, and the sad blindness to historical lessons learned that seems to occur in our field, has ever been written than this book. It contains a series of essays, each as good as the last. Fred Brooks is my mentor, my hero, and my model of a software engineer, a craftsperson, a pragmatic programmer, a technical communicator, and an innovator in computing. A must read.
5. The Secrets of Consulting by Gerald M Weinberg
This is a book about giving and receiving advice. It is not pointed out nearly enough how much of a senior developer, or architect, or team leader's role consists in giving and receiving advice. Whether it is to someone who is your boss, or to someone you are being paid only temporarily (as in the title, Consulting), you are going to be better off if you read this book, and understand the lessons inside it. This book tells you how to give your advice in a way that will be listened to. If you want to be an effective technical communicator you must know how to deal with people, not just with machines. This book is a must-read for that reason.
What are your favorite programming books that don't cover any language, library, or specific tool, but rather cover the practice of being a programmer?
* I should point out that I haven't read Extreme Programming Explained, by Kent Beck, but I hear a lot of people say the same thing about the XP book. I did read the Agile Software Development With Scrum book, and was underwhelmed. I do, however, agree with all the practices it mentions, but I feel that Agile often becomes, as Fred Brooks would call it, a "Silver Bullet", something we hope will save us.