# Distributed System Learning Path
## Metadata
**Status**:: #x
**Zettel**:: #zettel/index
**Created**:: [[2024-08-02]]
## Preparation
- [x] Link [Learning about distributed systems: where to start? | Readwise](https://read.readwise.io/later/read/01j446bgcjxseqmn612kf7tpwc)
- [[Murat Demirbas - Learning about distributed systems where to start (Highlights)]]
- [x] List steps in [Learning about distributed systems: where to start? | Readwise](https://read.readwise.io/later/read/01j446bgcjxseqmn612kf7tpwc)
## Syllabus
- Read [Distributed systems for fun and profit](https://book.mixu.net/distsys/single-page.html)
- Read the book [Introduction to Distributed Systems](https://cse.buffalo.edu/~demirbas/CSE586/book.pdf) by Paul Sivilotti.
- [Learn TLA+](https://learntla.com/)
- Read [Practical TLA+](https://link.springer.com/book/10.1007/978-1-4842-3829-5)
- Read [Distributed Systems 3rd edition (2017)](https://www.distributed-systems.net/index.php/books/ds3/)
- Read the article [Two-Phase Commit and Beyond](https://muratbuffalo.blogspot.com/2018/12/2-phase-commit-and-beyond.html)
- [Model Paxos in TLA+](https://muratbuffalo.blogspot.com/2016/11/modeling-paxos-and-flexible-paxos-in.html)
- Read [Hybrid Logical Clocks](https://muratbuffalo.blogspot.com/2014/07/hybrid-logical-clocks.html)
- Read [Logical clocks and Vector clocks modeling in TLA+/PlusCal](https://muratbuffalo.blogspot.com/2018/01/logical-clocks-and-vector-clocks.html)
- Read [There is No Now](https://queue.acm.org/detail.cfm?id=2745385)
- Read Designing Data-Intensive Applications
## AI Supplementary Materials
> [!bot] Perspective
>
> That's a great learning path you've put together for distributed systems! Here are some suggestions to improve it and fill in some gaps for a smoother learning experience:
>
> 1. Start with fundamentals:
> - Before diving into the Sivilotti book, consider reading an introduction to operating systems concepts, as distributed systems build on many OS principles.
> - Add "Distributed Systems for Fun and Profit" by Mikito Takada - it's a free online book that provides a concise overview of key distributed systems concepts.
>
> 2. Practical experience:
> - After reading the Sivilotti book, implement some basic distributed algorithms like leader election or consensus in a language of your choice.
> - Consider adding a hands-on course like MIT's 6.824 Distributed Systems, which has lectures and labs available online.
>
> 3. Formal methods:
> - Before jumping into TLA+, introduce yourself to formal specification and verification concepts.
> - Add "Specifying Systems" by Leslie Lamport as a precursor to the TLA+ resources you've listed.
>
> 4. Advanced topics:
> - After reading about Two-Phase Commit, explore other consensus protocols like Raft and Zab.
> - Add "Impossibility of Distributed Consensus with One Faulty Process" (FLP impossibility result) to understand fundamental limitations in distributed systems.
>
> 5. Real-world systems:
> - After reading about Paxos, study how it's used in real systems like Chubby (Google) and Zookeeper (Apache).
> - Add case studies of large-scale distributed systems like Amazon's Dynamo, Google's Spanner, etc.
>
> 6. Consistency models:
> - Add readings on different consistency models (strong consistency, eventual consistency, causal consistency) before diving into logical clocks.
>
> 7. Distributed databases:
> - Before reading "Designing Data-Intensive Applications", add some introductory material on distributed databases and NoSQL systems.
>
> 8. Networking fundamentals:
> - Ensure you have a solid understanding of computer networking concepts, as they're crucial for distributed systems.
>
> 9. Security in distributed systems:
> - Add readings on security challenges and solutions specific to distributed systems.
>
> 10. Emerging topics:
> - Consider adding material on blockchain technology and decentralized systems.
> - Explore serverless computing and its impact on distributed system design.
>
> This enhanced path provides a more comprehensive and gradual approach to learning distributed systems, balancing theory with practical experience and covering both foundational and advanced topics.
>
> Citations:
> \[1] https://cse.buffalo.edu/~demirbas/CSE586/book.pdf
> \[2] https://learntla.com