Seven Reading Suggestions for the Holidays

One time I asked a very experienced engineer about his favorite technical books. He told me: "I barely read technical books. I have learned what I know mostly through experience while building useful things". I totally agree; experience is very important. Nothing can replace experience; no university degree, certificate, or amount of knowledge can compensate for the lack of experience. So next time you see a job posting with 10+ years of experience requirement, don't get upset if you don’t have it, because certain things just take time. 

Having said that, I think it is still a good idea to constantly read technical books/papers for several reasons. Firstly, it is fun. Personally, nothing gives me more pleasure than being exposed to new ideas and organizing my knowledge around a subject. Also, we don't want to reinvent the wheel. Every year, some of very smart people publish the results of their hard work through conferences and journals. Why ignoring them and trying to come up with solutions by ourselves when the solutions are freely available? We don't want to go after impossible things either. Sometimes engineers go after problems that have been proved to be impossible decades ago. I have been told by my colleagues that I have good eyes for design flaws. I think what makes me able to see those flaws is being intimate with known trade-offs and impossibilities that I have learned by reading in my area as much as I can. By knowing exactly what is possible and what is not, you may be able to save a huge amount of time and energy for your team. Similarly, although you still need experience, you can shorten the amount of time you need to be an expert in your field by listening to people who are already expert. In case of a well-written technical book, an experienced person organizes his/her years of experience and presents it to you. What cloud be more exciting and valuable than that?

I was looking for new awesome books to read this holiday, and I thought maybe I can share some of my favorite books as well. Below is a list of seven of my favorite books on databases and distributed systems. Interestingly, all of them except for one, are available through O'Reilly membership. Many companies provide free membership for their employees, so if you have not used it yet, I suggest checking it. Just go to www.oreilly.com and sign in with your company credentials. 


Designing Data-Intensive Applications
by Martin Kleppmann 

Currently, this book is like the Sapiens of distributed systems books; it is rich, entertaining, and very popular. It has been one of the best selling books on distributed systems for good reasons. It covers most of exciting aspects of distributed systems, and at the same time, it is very entertaining. Martin Kleppmann is an interesting person and I suggest watching his talks on YouTube and following him on Twitter as well. He also blogs at martin.kleppmann.com. If you have not read this book yet, and like to expand your knowledge on distributed systems, look no more! Just pick up this book and enjoy reading it. 

Distributed Systems 
by Sukmar Ghosh

If you like a more academic book, you can pick up a textbook. This one is pretty good. The difference between this book and Kelppmann's is like the difference between pop and classical music. This book is more formal and less entertaining, but it is a solid book. It focuses on distributed systems and does not discuss databases except for distributed transactions. 

Database Internals
by Alex Petrov

This book is divided in two parts. The first part focuses on databases including storage technologies without any discussion about distributed systems. The second part focuses on distributed databases, but it does not go very deep. If you don't know much about distributed systems, I think it is better to start by reading previous books and use this one on the side. 

The Art of Immutable Architecture
by  Michael L. Perry

If you are already very familiar with distributed systems, how about rethinking everything? I am a huge fan of radical paradigm shifts that suddenly make everything simpler. It is interesting how in technology sometimes we get stuck with approaches that originally introduced due to limitations that we had decades ago, and we never change our approaches even when we don't have those limitations anymore. In this book, Perry talks about one of those no-longer-limitations which is "the limited storage". Today, we can consider the storage virtually infinite for many applications, i.e., we can afford storing everything and never deleting. How does this paradigm shift change the way we design distributed systems? Perry tries to answer that question in his book. This book can be considered an elaboration on Pat Helland's paper "Immutability changes everything". 

Graph Databases
by Ian Robinson, Jim Webber, and Emil Eifrem

There is not much reading material on graph databases internals. This book is one of few organized materials on graph databases, so if you are interested in learning more about graph databases, you can pick up this book. However, be aware that this book is written by Neo4j development team and you might find it too focused on Neo4j. It emphasizes the notion of "index-free adjacency", but as I have explained in my post on Graph Databases, this term does not seem to be very useful. 

Building Microservices
by Sam Newman

Microservices have become the de facto for modern cloud-based distributed systems that promote the use of finely grained services with their own lifecycles. If you like to learn more about microservices, this book is a great book to start. It explains the concepts by a running example of a fictional online retailer named MusicCorp. 

Kubernetes Patterns
by Bilgin Ibryam, Roland Huß

I finish my list with an awesome book on Kubernetes. Even if you don't want to use Kubernetes, I strongly suggest reading this book to learn how in practice we can package and deploy distributed systems on cloud. This book is not a Kubernetes reference manual. Instead, it is about design patterns. Other container orchestration technologies use similar concepts, so reading this book will help you understand and use other systems as well. 



I hope you find this list useful, and if you have any reading suggestion, please leave a comment below. 

Happy holidays!

Comments

Diptanshu said…
Excellent list!
May I add one more book recommendation: Principles of Distributed Database Systems 4th ed. (https://cs.uwaterloo.ca/~ddbook/). This book is rigorous academic text on modern distributed database systems.
Unknown said…
Thanks was looking for such a list

Popular posts from this blog

In-memory vs. On-disk Databases

ByteGraph: A Graph Database for TikTok

DynamoDB, Ten Years Later

Eventual Consistency and Conflict Resolution - Part 2