Today Michael Borodin, a full-stack software developer at Amazon will share his nine top books concerning improving the code and work efficiency enhancement in general.
Hello everyone, today we will discuss the must-read book list for programmers. Programming is a very dynamic industry where everything changes in a blink of an eye, and developers are used to consuming most of the information from articles or documentation for the tools they need in general, programming is such an interactive activity that it’s more logical and more efficient just to tinker with new technology for a couple of days than to look through a thick technological book.
Benefits of reading books
- Knowledge gets better
- Better information quality
- Topics covered deeper and more holistically
Books are difficult to read as it mostly takes plenty of time and they often come out very late, so it makes some of them outdated. Nevertheless, reading worthwhile books is indispensable. First of all, the positive side of reading books is that knowledge received in such a way is consolidated much better than the absorption of the information from the articles, as well as the quality of materials from the books is much higher. Also, the books provide us with a holistic and deeper understanding of a topic, but for reading not to be a waste of time, you need to know what to read, and, most importantly, how to read about it. And just about this, we will talk today. I have selected my top books, I tried to choose the ones that would come in handy for any developers regardless of the technology they work with or specialization, and so, let’s get started.
1. 14 Habits of Highly Productive Developers
I’ll start with perhaps the least known and the easiest book. Once I accidentally stumbled upon the book “14 Habits of Highly Productive Developers” by Zeno Rocha. As the title suggests, apparently the author was inspired by the book “The Habits of Highly Effective People” by Stephen R. Covey. “14 Habits of Highly Productive Developers” is a very easy-to-read, small-sized book. The author discusses the habits and traits that help developers become more successful. For example, the author advises finding a balance between the desire to explore new development tools and deeper leveraging of what you already know. The developer’s profession is so drastically changed that to stay afloat you will have to invest a lot of effort in continuous studying and you will not be able to do this by relying only on motivation as it won’t help you “keep the lights on” every day. Therefore, you should develop such habits of allocating some time for studying. Also, the author says that each developer sooner or later faces the issue regarding the tech stack – whether to gain experience in front-end or back-end development or become a full-stack developer. And the author of the book doesn’t give his unequivocal opinion but discusses the pros and cons of each approach.
2. Clean Code Robert Martin
The next book will not only increase your productivity but also allow you to save your nerves on the code review. It is called “Clean Code” by Robert C. Martin. The classic of the industry. This book will explain what you should focus on in the first place: not on the algorithmic efficiency of your code and not on how smartly it is written, but how easy it is to be supported, especially when you’re working on a big product, in a big team. Yes, code should be working fast but in the end the clearer you write the code, the less often you will hear whispers of insults from your colleagues. The book consists of two parts. The first part is about how to write clean code (how to name variables, how to separate classes, how to test concurrency code, and so on). The second part shows examples of how to make code cleaner using the principles from the first part, and how to fix common mistakes, and common problems.
3. The Pragmatic Programmer: from Journeyman to Master – Andrew Hunt and David Thomas
The third book on my list is “The Pragmatic Programmer: from Journeyman to Master” by Andy Hunt and Dave Thomas. Despite the book being written in the 90’s, it hasn’t yet become outdated. If you feel that you have stopped growing or would like to become more efficient, or you would like to work as productively as some of your colleagues do, then this book will help you create the right mindset, delve into the philosophy of programming, and get to know how to create software which just works and so to write such a code, the programmer should develop many skills besides the very code development. The book gives excellent advice on the topic of estimating the labor costs, analysis of requirements, refactoring, testing, prototyping, and many, many other aspects.
4. Deep Work: Rules for Focused Success in a Distracted World
A couple of other books from my top list are not directly related to programming, but perhaps they are even more useful for professional growth, rather than, let’s say, all algorithms. So, I highly recommend taking into consideration the book “Deep Work: Rules for Focused Success in a Distracted World” by Cal Newport. The book explains a rather banal obvious thing that the more focused the work is – the more it is productive, but it’s one thing to just understand this fact and the other thing is to be able to work like that. The book describes a set of simple rules that will help you learn how to work in a deeply focused mode.
5. Getting Things Done: The Art of Stress-Free Productivity
Also, I would like to introduce a cool book “Getting Things Done” by David Allen. The book teaches us to prioritize and bring things to the end. I haven’t finished this book yet so I can’t recommend it, but who knows, maybe this book taught me how to set the right priorities☺.
6. Designing Data-Intensive Applications
The next book is more relevant for the back-end engineers but is of such high quality that I couldn’t help including it. It is “Designing Data-Intensive Applications” by Martin Kleppmann. When I’m asked what to read to get prepared for the system design interview at a top company I always recommend this book. The first part of the book gives an introduction to the architecture of data processing management storage systems, there is a discussion of the concept of different types of DBMS, you will learn how indexes are organized, and so on. The second part of the book is about distributed systems. In great detail and at the same time as clearly as possible it is described replication and recovery from crashes, partitioning and transactions, data storage, and typical challenges of distributed systems. The third and the last part of the book is about reproduction, streaming, and so on. What else I like about this book is that the book is logically organized, quite clearly written, and covers a lot of topics with sufficient but not excessive depth. The author not only talks about concepts but also gives examples of the relevant tools. If you want to improve your skill in designing systems, then this is a must-read book.
7. Patterns of Enterprise Application Architecture
The next book is “Patterns of Enterprise Application Architecture” by Martin Fowler. Even though the book was written about 20 years ago, it remains relevant as it includes “the wisdom of the ages”. The book consists of two parts. The first part gives an insight into the various patterns and the second explains the nuances of the application. Briefly speaking, in the book, you will find the following info as the set of time-tested and actively used patterns, classification of the patterns, detailed explanation of the patterns by diagrams, class hierarchy diagrams, and nuances of using, pros and cons, when you should use a pattern and when it will only bring you more trouble, notes on how the best to apply them with examples, that are basically on Java although these patterns are relevant everywhere – both for web and for mobile development. So, if you are wondering how to organize your code to simplify refactoring, how to properly link the components, and so on, look through the book.
You may interested to read:
An alternative or better say additional book is “Design Patterns: Elements of Reusable Object-Oriented Software” by Erich Gamma, Richard Helm, Ralph Johnson, and John Vlissides, with a foreword by Grady Booch. It is perhaps a more classic book concerning patterns. It describes 23 popular patterns and heavily overlaps with the previously discussed book “Patterns of Enterprise Application Architecture”. So it could be useful to read them in parallel.
9. Refactoring – Martin Fowler
In this book, Martin Fowler shows how software developers can realize the significant benefits of refactoring and how to start turning a bad design into a good one. Each step of the refactoring is simple – at first glance, too simple to do it. This could be moving a field from one class to another, taking some code out of a method and turning it into a standalone method, or even moving code through the class hierarchy. Each individual step may seem elementary, but the cumulative effect of such small changes can radically improve the project. Refactoring is a sure way to prevent a program from falling apart.
In addition to describing various techniques, the author provides a detailed catalog of more than seventy refactorings, as well as helpful tips on how to use them, step-by-step instructions, and practical examples. The examples are written in Java, but the ideas apply to any object-oriented programming language.
10. Site Reliability Engineering: How Google Runs Production Systems
To conclude, I will give an example of the most controversial book. At one time it helped me formalize approaches where I had relied on intuition until then. And this book is “Site Reliability Engineering: How Google Runs Production Systems” by Betsy Beyer, Chris Jones, Jennifer Petoff, Niall Richard Murphy”. Despite the title, this book will be useful not only for the site reliability engineers, it describes the general approaches and rules, regardless of what you were developing. The book describes the practices used by the site reliability team in Google, but this is no less important for small companies without allocated roles SRE – how the on-call should be organized, how to correctly log, and which metrics of the service health should be tracked, and which are not that important. For a team of ten people, it is as important to be understood as for Google. Google distributes the book for free, it can be downloaded from this link: https://sre.google/books/
I also want to share interesting stories about how people after 30 years become programmers: