Recent influential reading
Friday September 29, 2006 by Derek Young
I pretty much stopped buying any technical books until recently, frustrated that the books I was buying just rehashed reference material already online without providing any new insight.
The books I’ve started buying again describe techniques instead of the technology of the day. Some of these have helped me step back and think harder about design and implementation:
Object-Oriented Design Heuristics—Riel
I put this at the top of my list because I believe it’s the most thought provoking of the bunch. The author tries to answer the question of “I have a design, now how do I know if it’s good or bad?” You see the design patterns from the GoF book all over the place while Riel’s heuristics are very much underrated. His description of a “god class”, that depends on and is depended on by too many other classes, reminds me of some of the code I used to write.
This book has more hidden gems than the rest on this list.
Refactoring to Patterns—Kerievsky
Althought it might not be as deep and revolutionary as Refactoring or Design Patterns the author has very practical advice about when design patterns simplify the code and other times when they’re overkill (like his chapter on “refactoring away from singleton”).
Agile Software Development, Principles, Patterns, and Practices—Martin
There have been a few high profile blogs attacking agile development recently (see Cedric, the bile blog ,and Steve Yegge). At least I think they’re attacking agile development. None of the three clearly identify the specific practices they disagree with or the processes they suggest as an alternative. I think all three authors agree with most of the techniques but hate the hype and with the way agile comes across as all or nothing by some proponents. Cedric, for example, is the author of TestNG, an alternative to JUnit. Hani, the author of the bile blog, gives talks on TestNG and wrote a TestNG plug-in for IntelliJ.
There are many aspects to agile development and extreme programming, including project management, scheduling, work environments, and finally coding. Do I want to share a cube with someone all day pair programming and write feature list on index cards? No. Do I think test driven development and writing simple, clean code is the best way to get understandable, maintainable done on time? Yes. I believe learning as many languages as possible and balancing the best techniques and tools is the best way to improve your code.
This book by Martin has very solid, practical advice on thinking hard about simplicity, organizing your code, making it work, and verifying that it keeps working. The book is heavy on code and design and light on evangalism. This book has helped my code improve more than almost any other book I’ve read.
Physically Based Rendering : From Theory to Implementation—Matt Pharr and Greg Humphreys
Although this book is obviously not a general programming book, it definitely deserves a mention here. This is the deepest and most advanced computer graphics book I’ve read. Pharr is able to translate a very complicated problem (a framework for several different rendering algorithms) into a very well written, object oriented design. It helps to remember that a clean design is always important, no matter how complicated the domain.
(great images generated with the renderer coded in the book:
image image image)

Shrink your editor window A simple Eclipse editor plug-in - just-one-space
