I recommend a principled, from the foundations-up, studying of distributed systems, which will take a good three months in the first pass, and many more months to build competence after that.If you are practical and coding oriented you may not like my advice much. You may object saying, “Shouldn’t I learn distributed systems with coding and hands on? Why can I not get started by deploying a Hadoop cluster, or studying the Raft code.” I think that is the wrong way to go about learning distributed systems, because seeing similar code and programming language constructs will make you think this is familiar territory, and will give you a false sense of security. But, nothing can be further from the truth.
Distributed systems need radically different software than centralized systems do. –A. Tannenbaum
Category: Distributed Systems
Learn TLA+
This is a free online resource for learning TLA+. To help both beginners and experienced users, the guide is divided into three parts: The Core: a linear introduction to all of the TLA+ language. It starts with basic operators and gradually progresses all the way to advanced topics. The core is intended to be read linearly: people new to TLA+ should start with the conceptual overview and then work forward from there. People comfortable with TLA+ should skim until they find new material. Topics: “Optional” advanced material. Any individual lesson will be useful to many but not all TLA+ users. Unlike the core, these are designed to be mostly independent of each other. If topics have dependencies on other topics, I will call them out. Examples: Applications of TLA+ to specs, showing both how to write and understand specs.
Source: Learn TLA+ — Learn TLA+