resources

constantly updated as i find more good stuff

papers worth reading

the unix time sharing system

ritchie & thompson, 1974

the paper that started it all.

read paper →

communicating sequential processes

hoare, 1978

theoretical foundation for go's concurrency model.

read paper →

can programming be liberated from the von neumann style?

backus, 1977

why functional programming matters.

read paper →

worse is better

gabriel, 1991

why simple, imperfect solutions often win.

read paper →

recursive functions of symbolic expressions

mccarthy, 1960

the paper that invented lisp.

read paper →

out of the tar pit

moseley & marks, 2006

complexity is the enemy. every programmer should read this.

read paper →

distributed systems

paxos made simple

lamport, 2001

fundamental consensus algorithm explained clearly.

read paper →

raft consensus algorithm

ongaro & ousterhout, 2014

more practical alternative to paxos.

read paper →

the google file system

ghemawat, gobioff, leung, 2003

foundation for modern distributed storage.

read paper →

dynamo

decandia et al., 2007

eventually consistent systems.

read paper →

time, clocks, and ordering

lamport, 1978

essential for understanding distributed time.

read paper →

mapreduce

dean & ghemawat, 2004

functional programming at datacenter scale.

read paper →

type theory & type systems

types and programming languages

pierce, 2002

the definitive textbook. covers lambda calculus to system f.

propositions as types

wadler, 2015

the curry-howard correspondence explained beautifully.

read paper →

a theory of type polymorphism in programming

milner, 1978

the paper that introduced hindley-milner type inference.

read paper →

principal type-schemes for functional programs

damas & milner, 1982

algorithm w for type inference. foundation for ml and haskell.

read paper →

intuitionistic type theory

martin-löf, 1980

dependent types and constructive mathematics. mind-bending.

read paper →

on understanding types, data abstraction, and polymorphism

cardelli & wegner, 1985

comprehensive survey of type systems and polymorphism.

read paper →

practical foundations for programming languages

harper, 2016

rigorous treatment of pl theory. great companion to tapl.

the little typer

friedman & christiansen, 2018

gentle intro to dependent types in the "little schemer" style.

essential books

the c programming language

kernighan & ritchie

still the best way to learn how computers work at the system level.

structure and interpretation of computer programs

abelson & sussman

how to think about computation.

designing data-intensive applications

kleppmann

the bible for modern backend systems.

computer systems: a programmer's perspective

bryant & o'hallaron

how computers work from the bottom up.

crafting interpreters

nystrom

build two complete interpreters from scratch.

database internals

petrov

deep dive into how databases actually work.

hands on learning

build your own x

tutorials for building git, docker, databases from scratch.

view repo →

nand2tetris

build a computer from logic gates to high level programs.

take course →

linux from scratch

build a complete linux system from source code.

start building →

os dev wiki

comprehensive guide to operating system development.

visit wiki →