My favorite papers

Following the tweet above, Iโ€™ve decided to do a thread dump of my favorite computer science papers.

This is not a you should read these papers kind of post, itโ€™s a curated list of great computer science papers that Iโ€™ve enjoyed reading and re-reading over the past years.

(I think you should read them as well!)

๐Ÿ“ƒ The Design and Implementation of a Log-Structured File System

๐Ÿ’ก Youโ€™ll learn about a technique called a log-structured file system that writes all modifications to disk sequentially, thereby speeding up both file writing and crash recovery.

The Design and Implementation of a Log-Structured File System

๐Ÿ“ƒ The Ubiquitous B-Tree

๐Ÿ’ก Youโ€™ll learn about a disk-based index structure called B-Tree and its different variations. The paper does quite a good job of explaining why they have been so successful over the years.

The Ubiquitous B-Tree

๐Ÿ“ƒ The Log-Structured Merge-Tree

๐Ÿ’ก Youโ€™ll continue to learn about low-cost indexing for a file experiencing a high rate of record inserts over an extended period. The paper also provides a nice comparison of LSM-tree and B-tree I/O costs.

๐Ÿ“ƒ Kafka: a Distributed Messaging System for Log Processing

๐Ÿ’ก Youโ€™ll learn about log processing, Kafkaโ€™s architecture, and design principles including producers, brokers, and consumers.

๐Ÿ“ƒ ZooKeeper: Wait-free coordination for Internet-scale systems

๐Ÿ’ก Youโ€™ll learn about the ZooKeeper wait-free coordination kernel and a lot of distributed systems concepts that are nicely described in the paper.

๐Ÿ“ƒ A Certified Digital Signature

๐Ÿ’ก Youโ€™ll learn about one-way functions, the Lamport-Diffie one-time signature, and a new โ€œtree-signatureโ€ also known as Merkle tree.

๐Ÿ“ƒ Time, Clocks and the Ordering of Events in a Distributed System

๐Ÿ’ก Leslie Lamportโ€™s most cited paper. Youโ€™ll learn about logical clocks, real-time synchronization, and concepts such as โ€œtotal orderingโ€ and โ€œhappened-beforeโ€.

๐Ÿ“ƒ Harvest, Yield, and Scalable Tolerant Systems

๐Ÿ’ก Youโ€™ll learn about strategies for improving a systemโ€™s overall availability while tolerating some kind of graceful degradation.

๐Ÿ“ƒ The Byzantine Generals Problem

๐Ÿ’ก Youโ€™ll learn about reliability in computer systems, whenever it has to cope with the failure of one or more of its components.

๐Ÿ“ƒ Linearizability: A Correctness Condition for Concurrent Objects

๐Ÿ’ก Youโ€™ll learn about a strong correctness condition for concurrent objects that guarantees a strict time ordering of read and write operations in a multi-threaded environment.

๐Ÿ“ƒ Conflict-free Replicated Data Types

๐Ÿ’ก Youโ€™ll learn about a data structure that makes the eventual consistency of a distributed object possible without coordination between replicas.

๐Ÿ“ƒ Delta State Replicated Data Types

๐Ÿ’ก Youโ€™ll learn about an optimization made to state-based CRDTs that ensure convergence by disseminating only recently applied changes, instead of the entire (possibly large) state.

๐Ÿ“ƒ Making reliable distributed systems in the presence of software errors

๐Ÿ’ก Youโ€™ll learn about Erlang, concurrent programming, message passing, fault-tolerance, and the concept of โ€œlet it crashโ€.

Looking for more papers?

These are my favorites.

I might be missing a few papers, for sure.

You can still find a lot of curated papers for you to read at @papers_we_love, @intensivedata, and @therealdatabass.