My developer’s reference book collection 2021!
So, I thought I’d share some details and personal comments about the collection of reference books that I have accumulated over the last year or so. These are quite handy to have and help me become a better software developer. I also think its important to be aware of best practices, and take a step back to learn about topics that are outside your normal work. Since I work in machine learning, the programming languages of interest to me are mainly C++ and Python, with additional languages such as Go, Julia and a smattering of others.
So here goes!
-
C++ Primer (5th Edition) by Lipman et al. - A great book for beginner and intermediate level C++ developers. The book covers most fundamental concepts in detail, and has a really good set of excercises and problems that will get you started right away. Although it doesn’t go much into the powerful aspects of modern C++, it covers the language essentials in good detail.
-
Effective Modern C++ by Scott Meyers - C++ has evolved quite a bit from the old C++98. Today most organisations use C++14 and onwards, which is usually referred to as “modern C++” since there are quite a few enhancements to the language, like smart pointers for example. This book is a must have if you are a serious C++ programmer, and wish to make use of these features correctly. The book is definitely a handy reference, since most of the ideas can be understood on the first read, but you would find yourself constantly referring to the examples when you wish to use those features in code.
-
Effective Python by Brett Slatkin - This book is a really nice collection of ways to use Python better. Python is a simple and easy to use language, and even new programmers would feel fairly comfortable programming in Python. However, there is a lot more to Python that can really make you craft sound codebases. These are not just a collection of best practices, but also make you think about design and modularity of code. There are especially many tips to make code more readable, less prone to bugs and hence improves the overall maintainability of large codebases.
-
Design Patterns: Elements of Reusable Object-Oriented Software by Gamma et al. - Design patterns are super useful for professional developers. So its kind of like a cookbook but with example recipes, discussing commonly occurring problems in software, where the recipes are reference implementations of design patterns. These templates can then then be modified and used to address similar problems in your own codebase. Learning about these design patterns also sharpens your nose for picking up on areas where your code could use a re-design.
-
Clean Code by Robert C. Martin - This book is perhaps the most general in the collection. If software engineering is a religion then this book is kind of like a bible. It articulates principles of writing good code, and taking responsibility for various actions as a developer. In most professional roles, a developer usually ends up accruing technical debt by crafting bad code, due to time limitations and other constraints. This book covers such scenarios and helps identify where you can do better, right from the start. Most of the examples are in Java, but the examples are straight-forward and the underlying principles transcend any single language and can be applied everywhere.
-
Refactoring by Martin Fowler - Ok this is one of the latest acquisitions, so I haven’t gone through it much to be honest. But from skimming through the book, it seems to present an organised approach to refactoring and cleaning up existing code. Now, we all refactor code all the time, but in most cases we don’t stop to check how the addition or modification affects other internal parts which may be connected. Hence, refactoring code in a more principled way by taking extra care about the internal structure and mechanics is quite important, and this book gives many such example refactorings. Definitely a nice addition to the reference book collection!
-
UNIX and Linux System Administration Handbook, 5th Edition by Evi Nemeth et al. - A reference book collection is incomplete without a handbook on linux. I like to get the best out of developing on linux, and most often I need to work with large datasets and hence use different storage systems. Knowing how to work efficiently with file-systems can really make a difference in productivity since you can use a lot of built-in tools or linux packages to solve your problems. Installing software and packages on linux systems is also a useful skill and knowing how to debug issues related to the OS are invaluable. It is also really useful to have a good reference book to help deal with networking issues, for example while developing applications that involve using a client-server model of communication.