“An investment in knowledge always pays the best interest.” – Benjamin Franklin.
There is so much change happening around us, especially in the world of computing. Like never before, we have so much computing power at our disposal. We have connected most of the human beings through technology (mobiles and social media). Even devices are getting connected to internet.
We are also living in frustrating times because of these changes.
Our programming skills focused on getting our work done through libraries & frameworks in Java or C#, developing software for the desktops, using process-heavy & documentation-heavy software development practices, etc. aren’t much relevant in this world any more. That’s old-school of programming!
These factors have two implications:
a) That doesn’t mean old books are irrelevant or useless. Yes, old technology books like PL/1 and dBase are irrelevant and useless now – but classic ones on writing great code, coding efficient algorithms, debugging effectively are timeless and are still very useful today.
b) Developers who commit themselves to continuous learning and adapting to changing needs are the ones who will come out as winners.
With this in mind, here is a list of 9 books that I helped me in my career and that I believe every developer should read. [Note: The books here are not ranked in any order].
Programming pearls brings us back-to-the-basics and helps us revisit key topics such as algorithm design in specific and writing high-performance code in general. Recently, I started exploring the world of NLP (Natural Language Processing) which is receiving wider attention now because of popularity of chatbots. I find that the algorithmic approach covered in this book for string/text processing is very useful and valuable.
In programming, it is difficult to make even the smallest of decisions, such as “Which variable name or control structure to use?”, “To comment or not to comment?”, “Should I refactor this code?” This book covers provides a big-picture for software development and also delves into code-level details. When I have new recruits and interns, I strongly recommend them this book because it provides them good foundation for a great career ahead.
This classic book provides valuable and practical advice to programmers. This book is not specific to any language or technology and it provides specific “tips”. My favourite tip is “Tip 35 – Finish what you start”! I got exposed to concepts such as “broken window theory” from this book, so I strongly recommend it to all the developers.
This is a classic work on patterns. It provides insights on creating effective object oriented designs in the form of generic “reusable” design knowledge. This is not a book that you can read from front to back cover. I come back to reading it for getting inspiration from time-to-time (e.g., the initial chapter is a “treatise” on object orientation). I have seen many programmers recommending Head First Design Patterns over this classic book – yes, the head first series is fun to read, but I want to delve deep and I prefer this original work.
The refactoring book is a classic work on refactoring. It provides insights on emergent design and how to create and evolve quality software. This book covers foundational aspects, process and mechanics of refactoring. Written in a free-flowing and easy-to-read style, this book is also an inspiration for writers like me. However, the book has considerable whitespaces, like lack of focus on “principles” and “tools”, which we covered in our own book on refactoring.
Learning OO features is easy, but mastering OO design is difficult. This excellent book on object oriented programming and design. What I like about this book is that it explicitly mentions “Dos and Don’t’s” in design. It covers universal principles on OO design encapsulated in pithy statements (also cross-referenced and summarized in the end).
The mythical man-month is an old book (1975!) but what it discusses still remains relevant. In fact, a few years back I came across a project where the project manager was adding people to a late project, and I wanted to tell him: “adding people to a late software project makes it late” (that I learned from this book).
Kent Beck is one of those amazing programmers that we get inspiration from. He explains his approach towards software development in XP (Extreme Programming). Many practices such as writing tests before code (TDD), pair programming, etc are now widely accepted (aside: XP is still evolving). I like this book because of its pragmatic view on software development practices.
Robert C Martin is another programmer that I greatly admire. His important contribution: documenting key design principles such as Single Responsibility Principle (SRP), Dependency Inversion Principle (DIP), and Interface Segregation Principle (DSP). This book provides his perspective towards software design and development.
It is hard to get access to the minds of great developers and thought leaders – and books are the closest that we can reach to. Hence, I invite you to explore these books and many other excellent books available out there.
Am I missing any book that you love and want to recommend to others? Please share it as a comment here.