The indispensable reading list for all software developers
No matter how long you’ve been working in software development, there’s always something new to learn. The question is – where do you start? In this article I’ve put together my top seven computer science book recommendations which I’ve found indispensable in our ever-changing industry.
Clean Code: A Handbook of Agile Software Craftsmanship
(Robert C. Martin, Prentice Hall, 2008, ISBN-13: 978-0132350884)
In this book Robert C. Martin (aka. ‘Uncle Bob’) presents a critical view on established programming paradigms and supposed best practices. The biggest strength of this book are his recommendations on creating better structured and readable code. Some of his conclusions might seem radical to inexperienced programmers. Take ‘comments lie’, for example. But, if you really take on board what Martin describes as his ‘lessons-learned’ , you can improve your code quality a lot.
There is a warning at the beginning of the book: ‘there will be code’. And Robert C. Martin makes good on that promise. So be prepared to get your hands dirty with coding, instead of perusing abstract theoretical papers.
Disclaimer: it is a lot of work to get rid of your own die-hard prejudices and habits. But that’s what makes this book even more essential.
The Pragmatic Programmer. From Journeyman to Master
(Andrew Hunt, David Thomas, Ward Cunningham, Addison Wesley, 1999, ISBN-13: 978-0201616224)
This book is a great mix of work ethics codex for professional software developers and software design best practices. Among the many topics covered, the book explains why it’s important to take full responsibility for your own code. But rather than feeling like a lecture, it’s all done in good humour – with sardonic titles like ‘The Cat Ate My Source Code’.
Working Effectively with Legacy Code
(Michael C. Feathers, Prentice Hall, 2013, ISBN-13: 978-0131177055)
This book is frankly a life saver for anyone who’s ever been faced with the dreaded two words: inherited code. Much like Douglas Adam’s Hitchhiker’s Guide to The Galaxy, it would have been fitting to have the words ‘DON’T PANIC’ in large, friendly letters on the cover.
Chapter by chapter, this book introduces various step-by-step options to turn software that’s hard to test and maintain into readable, modular and well tested software.
The Mythical Man-Month. Essays on Software Engineering
(Frederic P. Brooks, Addison-Wesley Longman, new edition 1995, ISBN-13: 978-0201835953)
While written quite some time ago, this book is still a must-read about software project management. Even though technology is changing rapidly, the principles of coding still remain the same – so it should not come as a surprise that the core topics haven’t lost any of their relevance.
I’d really recommend the essay on one of the most common misconceptions in project management: the idea that software project progress would scale with the number of team members.
Another great chapter talks about the ‘second system’ effect. A topic which is guaranteed to give any seasoned software developer an unpleasant sense of déjà vu.
Clean Architecture: A Craftsman’s Guide to Software Structure and Design
(Robert C. Martin, Prentice Hall, 2017, ISBN-13: 978-0134494166)
What’s the most defining property of a good software architecture? Do you feel tempted to answer ‘long-term stability’? Then you should definitely read this book.
In this short and entertaining book Robert C. Martin points out goals and solutions for effective software design. The book is rounded off by hilarious autobiographical examples that demonstrate the key principles he introduces with real-world projects and challenges.
Design Patterns: Elements Of Reusable Object Oriented Software
(Erich Gamma, et al., new edition 2015, ISBN-13: 978-9332555402)
After many years this is still the gold standard literature about software design patterns. Many developers know only a small number of those patterns. For example, the equally loved and loathed ‘singleton’. But there are many others worth knowing too. And conveniently, you’ll find code examples and typical implementation methods for each of the discussed patterns.
And much like The Mythical Man-Month, the age of the book doesn’t make it any less relevant today – as the general concepts still apply to any object-oriented programming language.
Okay, I’ll hold my hands up – this isn’t a single book, more a loosely connected series. But as all the Effective titles are as good as each other, I thought they deserved a single catch-all entry here. Each book in the series explains the inner workings and pitfalls of programming languages. Of course it doesn’t stop there – you’ll get invaluable tips and and best practices that will help you avoid the said pitfalls.
The books covers a wide variety of programming languages. Most of the sections get regular updates. So it’s a good idea to keep your eyes peeled for the latest edition.
- The “Effective C++” series (Scott Meyers, Addison-Wesley) – too many books to list them separately
- “Effective Loading...Java” (Joshua Bloch, Addison-Wesley, 2017, ISBN-13: 978-0134685991)
Someone in a podcast once called the issues covered in the C++-series, ‘the various black belts in C++’. I couldn’t agree more.
So there you have it. I hope these seven essential books will arm you with everything you need to take your coding to the next level. And, if you’re ever stuck on your commute and you want a shorter fix of tech insights, I’ll be adding new blogs here each week. Happy reading.
The first version of this article was published in German language by Consort NT. Publication is granted with friendly permission of the original copyright holder.