You can’t create something out of nothing.
Docker Deep Dive by Nigel Poulton
When I want to learn how Docker works behind the scenes, I searched a lot online, but the output is very limited. And ‘Docker Deep Dive’ is the only one I can find! This book covers many topics related to Docker. It doesn’t show the source code level details, but it serves as a good starting point for the exploration of the container technology world. The explanation of VXLAN
in the Docker networking part is the most impressive chapter for me.
Design Patterns Explained: A New Perspective on Object Oriented Design by Alan Shalloway
In my opinion, design patterns are one of the most overlooked skills by software engineers. I rarely hear colleagues discussing it in my work. Only when you need to refactor or extend a project written by someone else will you realize your macro-level design skills are quite limited. To be honest, I read this book because the classic ‘Design Patterns’ by the ‘Gang of Four’ is too difficult to understand. Books related to design patterns need to provide a context. Only when readers understand this context can they further comprehend the value of various patterns. This book allows me to easily immerse myself in its context and engage in deep thinking, which is the most valuable aspect.
Advanced Algorithms and Data Structures by Marcello La Rocca
This is an algorithm book that I will definitely read repeatedly in the future! Compared to other classic algorithm books, it is much less academic. You won’t find many complex formulas and derivations, but rather, you will see many illustrative diagrams that help you understand. Pay attention to the word ‘advanced’ in the book title, which means that the book discusses high-level data structures and algorithms. I believe that very few people would frequently use data structures like Bloom filters, which are discussed in the book, in their daily work. However, reading this book will make you aware that there are indeed people in your industry using such advanced technology, which is awe-inspiring.
Foundations of Scalable Systems: Designing Distributed Architectures by Ian Gorton
Designing scalable distributed systems is a crucial skill for senior software engineers. Nowadays, interviews for such positions often include a focus on this skill, known as a system design interview
. And this book can provide a solid foundation for excelling in these interviews.
I highly recommend every chapter of this book to the readers. various layers of a scalable distributed system, including the underlying network protocol, distributed databases, distributed caching, message brokers, microservices, serverless architectures, and more. All of these topics can greatly deepen your understanding of the scalable distributed system. Of course, if you want to fully absorb the contents, multiple readings of the book may be necessary.
Grokking Concurrency by Kirill Bobrov
One of the standout features of “Grokking Concurrency” by Kirill Bobrov is its explanation of how concurrent programming operates in a universal context, transcending the confines of any specific programming language. This broad approach not only enhances comprehension but also underscores the fundamental principles underlying concurrent programming, making it applicable across diverse programming environments. On completing this book, I gain a comprehensive understanding of the intricacies of concurrency, parallelism, multithreading, and asynchronous programming.
Start Small, Stay Small: A Developer’s Guide to Launching a Startup by Rob Walling
This book has been on my radar for quite some time, and despite its publication approximately 10 years ago, its content remains incredibly relevant. It effectively addresses two crucial questions: why developers transition into self-funded startup entrepreneurship, and more importantly, how to navigate this shift successfully.
While it is true there are always new technologies to learn, as you mature in your technology career it's likely you will begin to feel like a hamster on a wheel as you learn one more way to pull data out of a database
. Superficial learning of this kind is insufficient for long-term career security. The book reinforced my belief in the need to leverage my software engineering skills to establish and own a business.
The book then provides a comprehensive framework for actualizing this goal. It emphasizes that as a software engineer, technical and coding skills contribute to less than 30% of the overall objective. Instead, one must learn how to identify a viable market, effectively market their product, and manage their time efficiently. It underscores the potential necessity of delegating tasks, even including aspects of coding to achieve success!