In this post, I would like to share the list of my 7 favorite authors on code design. Books, articles, and courses from these guys made a huge impact on the way I code today. All of them have written at least one book which focuses on code design for maintainability, understandability or readability. These books are very interesting to read. When you finish them, you feel enlighted.
Robert C. Martin. It is hard to explain why I like this guy so much! I believe he has made the greatest contribution to the clean code movement. He focuses on having everything clean. His books (especially Clean Code one) are on every developer’s shelve. His presentations are really fun to watch. I think everyone should do presentations this way, otherwise there is no real need to do a presentation. People can always read the information on the web without spending much time listening to you. Robert has always deep insight. Most of his appearance makes me think hard on the topic. And his clean coders videos are awesome: entertaining and teach a lot!
Martin Fowler made a huge impact to the code design by his refactoring book. Maybe he is not the one who invented refactoring, but he is the one who brought refactoring to the everyday practice of millions of developers. Although Martin focuses on enterprise systems design, he very often writes a lot of useful information on code level design on his Bliki. He also wrote a very interesting book, on domain specific languages. This book did not become very popular, but it is extremely interesting from the code design point of view. For example, there you can learn how to design fluent interfaces (which are very popular in today frameworks).
Mark Seemann is the author of well-known in .NET community book Dependency Injection in .NET. Although the book is somewhat specific, I enjoyed very much Mark’s Pluralsight courses. Especially the course Encapsulation and SOLID. What is interesting about Mark’s stuff is that he brings a lot of functional practice into ordinary OO coding. If you like to learn how to write clean code in the functional language like F# or how to improve the ‘cleanness’ of your OO code with functional techniques, you should definitely check out his blog and Pluralsight courses.
Michael Feathers wrote a great book named Working effectively with legacy code. There you will learn that author understands that real-world programming is not as beautiful and easy as it is in simple code examples. Michael gives guidelines how to deal with ugly legacy code out there (who managed to avoid working with a legacy in his career?) and gradually arrive at the better-designed code. This book is very good help for those who are overwhelmed with huge legacy systems and just don’t believe that clean code rules and principle could help them or are of any value in their situations. Michael continues writing on code design on his blog.
Steve McConnell is the author of the seminal book Code Complete. This book is rated in many polls as the best book on software engineering out there. And I would agree. Although the book is ancient (taking to account the speed of our industry) it is still widely bought and read. People still develop code construction courses and video tutorials based on this book. If I was limited to read only one book in my career, I would most probably choose this one. Unfortunately, Steve seems to stop his activity in code design/construction area. I can’t see anything new from him on the web and conferences.
Roy Osherove. You probably will be surprised to see him on this list. Roy mostly works in the unit testing area. But who said unit tests are not code? All automated tests are code and all this code should be clean as well as production code. Otherwise, its value will be neglected with maintenance cost. And this is Roy’s book’s, The Art of Unit Testing, main idea and focus. He teaches you the way you should design your test code to avoid maintenance nightmare. Roy is still active on the topic, writes blog posts and records a lot of video on automated tests design. All of this content can be reached here.