Learning path
Parallel and distributed computing
Understand concurrency versus parallelism, thread pools, processes, speed-up limits, MapReduce, logical clocks, and replication with quorums.
About this subject
Parallel computing uses several processors to finish one job sooner. Distributed computing coordinates several machines that can fail independently and have no shared clock. The two share a theme, which is that doing things at the same time makes correctness and performance harder to reason about.
This path covers thread pools for waiting work, processes for CPU-bound work, Amdahl's and Gustafson's laws, the MapReduce model, Lamport logical clocks, and quorum replication. Each lesson uses a small, complete program that runs on its own. Python has the full sequence. The other languages listed below add lessons that use that language's own idioms and standard library, such as Java threads, C++ smart pointers, C# LINQ, or Node.js streams, and appear only for the topics the language supports. The programs are simplified models chosen to make an idea visible, so they are a foundation for further study rather than a replacement for a full course or for production-grade software.
Before you start: Functions, classes, and the operating-systems lesson on synchronization.
- 1
Python
Readable code for automation, data, and first programs.
Concurrency with thread pools for waiting work
Overlap tasks that mostly wait, such as network or disk requests, and keep results in order.
Parallelism with processes for CPU-bound work
Split heavy computation across worker processes that run on separate cores.
Speed-up limits: Amdahl's and Gustafson's laws
Compute how much faster a program can get when only part of it runs in parallel.
MapReduce: word count in three phases
Express a computation as map, shuffle, and reduce steps that can run on many machines.
Logical time: Lamport clocks
Order events across machines without a shared clock by counting events and message receipts.
Replication and quorums
Read and write a majority of replicas so that every read overlaps the latest write.
- 2
C
Learn memory, pointers, and efficient systems programming.
- 3
C++
Build fast applications with modern types and classes.
- 4
- 5
- 6
Kotlin
Write concise, typed code for JVM applications.
- 7
JavaScript
Add behavior to the web and build applications.
- 8
TypeScript
JavaScript with static types for dependable code.