Every industry has the classic books that everyone talks about, or should understand. The software industry is no different. There are many books I could recommend, but narrowing down the list to just three I would pick these.
Martin Fowler published this book in 1999 and it started people thinking about how to improve their existing code. Very rarely do developers get to start from scratch. In Refactoring: Improving the design of Existing Code, Fowler discusses ways to clean up and change code to make it easier to maintain. As a home improvement nut I see a lot of my project as “Refactoring the home”. In our old house we have many messes we have uncovered from the previous owner. Your software code can be the same. As others move on to new projects or jobs, you may inherit a mess. Fowler tries to get us to think about the next developer and make it easy to read.
Refactoring can help you improve the design of existing code. Many times when you are re-working your code you may stumble upon a bug or a performance issue. Working with a new developer once he liked to try adding new things to the code. He added a few too many loops to a program and boy did it furn slow!
Robert Martin starts off in Clean Code about how he worked in a start-up, and they created a software product. They added many features to the product until it didn’t work. The code had become unmanageable and the company failed because of it. Clean Code: A Handbook of Agile Software Craftsmanship has many good principles that will help every developer. Oddly enough some of the recommendations seem like common sense, but I guess we all need reminding sometimes.
One basic tenet of this book is code readability. We have all seen code with variable names that leave you guessing,”What does that mean?” We may just quickly make a small change to fix that last bug to get ready for the release. Martin reminds us to take a few extra minutes and create meaningful variable and method names. Our code should be easy to read, understand, and change.
This last book changed my perception of development. In Pragmatic Programmer: From Journeyman to Master, the authors tell us to think about our work as craftsman. I enjoy this analogy for development, and I see many parallels. Developers need to invest in their knowledge portfolio and build upon that. Just as a craftsman learning new techniques we need to gain new skills to add to our toolset. Another interesting thought that Hunt and remind us of, is master our tools. A developers workbench is their Integrated Development Environment or IDE. We should know them inside and out. I have spent many years in Eclipse, but now am learning more about JDeveloper, I need to work on mastering my tools.
What other books would you include? Do you have a classic to add?