nothing matches that.
operating systems
14 items- 01.01 operating systems: three easy pieces
remzi & andrea arpaci-dusseau. the best free intro to virtualization, concurrency and persistence.
- 01.02 the unix time-sharing system
ritchie & thompson. the paper that started it all.
- 01.03 mit 6.1810: operating system engineering
mit pdos. labs on xv6, a small unix for risc-v.
- 01.04 lions' commentary on unix
john lions. line-by-line walk through sixth edition unix.
- 01.05 plan 9 from bell labs
pike et al.. what unix's authors did next: everything is a file, for real.
- 01.06 seL4: formal verification of an os kernel
klein et al.
- 01.07 the multikernel
baumann et al.. treat a multicore machine as a distributed system.
- 01.08 an analysis of linux scalability to many cores
boyd-wickizer et al.
- 01.09 the linux scheduler: a decade of wasted cores
lozi et al.
- 01.10 writing an os in rust
philipp oppermann. a bootable kernel, one post at a time.
- 01.11 the little book about os development
helin & renberg
- 01.12 linux insides
0xax. how the linux kernel boots and works, from the source.
- 01.13 os dev wiki
the reference for writing your own kernel.
- 01.14 linux from scratch
build a complete linux system from source.
computer architecture
11 items- 02.01 computer systems: a programmer's perspective
bryant & o'hallaron. how computers work from the bottom up.
- 02.02 nand2tetris
nisan & schocken. logic gates to a working computer to tetris.
- 02.03 code: the hidden language of computer hardware and software
charles petzold
- 02.04 computer organization and design
patterson & hennessy
- 02.05 computer architecture: a quantitative approach
hennessy & patterson
- 02.06 what every programmer should know about memory
ulrich drepper. caches, numa and why memory access patterns matter.
- 02.07 the case for the reduced instruction set computer
patterson & ditzel
- 02.08 build an 8-bit computer
ben eater. a cpu on breadboards, wire by wire.
- 02.09 computer architecture lectures
onur mutlu
- 02.10 software optimization resources
agner fog. instruction tables and microarchitecture guides for x86.
- 02.11 intel 64 and ia-32 software developer manuals
intel
systems programming
11 items- 03.01 the c programming language
kernighan & ritchie. still the best way to learn c.
- 03.02 the linux programming interface
michael kerrisk. the linux and unix system call interface, exhaustively.
- 03.03 advanced programming in the unix environment
stevens & rago
- 03.04 linkers and loaders
john levine
- 03.05 linkers, a 20-part series
ian lance taylor. from the author of the gold linker.
- 03.06 what every c programmer should know about undefined behavior
chris lattner
- 03.07 memory allocation
sam rose. an interactive explanation of malloc and free.
- 03.08 the rust programming language
klabnik & nichols
- 03.09 the rustonomicon
the dark arts of unsafe rust.
- 03.10 learn rust with entirely too many linked lists
aria beingessner
- 03.11 beej's guide to c programming
brian hall
compilers & interpreters
12 items- 04.01 crafting interpreters
robert nystrom. two complete interpreters, a tree-walker and a bytecode vm.
- 04.02 compilers: principles, techniques, and tools
aho, lam, sethi & ullman. the dragon book.
- 04.03 engineering a compiler
cooper & torczon
- 04.04 an incremental approach to compiler construction
abdulaziz ghuloum. a working compiler at every step, down to x86.
- 04.05 essentials of compilation
jeremy siek
- 04.06 let's build a compiler
jack crenshaw
- 04.07 writing an interpreter in go
thorsten ball
- 04.08 simple but powerful pratt parsing
alex kladov
- 04.09 my first language frontend with llvm
llvm project. the kaleidoscope tutorial.
- 04.10 the implementation of functional programming languages
simon peyton jones
- 04.11 stanford cs143: compilers
- 04.12 compiler explorer
matt godbolt. see what your code compiles to.
programming languages & types
23 items- 05.01 structure and interpretation of computer programs
abelson & sussman. how to think about computation.
- 05.02 types and programming languages
benjamin pierce. the definitive textbook, from lambda calculus to system f.
- 05.03 practical foundations for programming languages
robert harper. rigorous pl theory. a good companion to tapl.
- 05.04 software foundations
pierce et al.. logic and pl theory, proved in coq.
- 05.05 programming languages: application and interpretation
shriram krishnamurthi
- 05.06 the little typer
friedman & christiansen. dependent types in the little schemer style.
- 05.07 recursive functions of symbolic expressions
john mccarthy. the paper that invented lisp.
- 05.08 the next 700 programming languages
peter landin
- 05.09 can programming be liberated from the von neumann style?
john backus
- 05.10 a theory of type polymorphism in programming
robin milner. introduced hindley-milner type inference.
- 05.11 principal type-schemes for functional programs
damas & milner. algorithm w.
- 05.12 intuitionistic type theory
per martin-löf
- 05.13 on understanding types, data abstraction, and polymorphism
cardelli & wegner
- 05.14 type systems
luca cardelli
- 05.15 propositions as types
philip wadler. the curry-howard correspondence.
- 05.16 theorems for free!
philip wadler
- 05.17 monads for functional programming
philip wadler
- 05.18 why functional programming matters
john hughes
- 05.19 typing haskell in haskell
mark p. jones
- 05.20 a history of haskell: being lazy with class
hudak, hughes, peyton jones & wadler
- 05.21 bidirectional typing
dunfield & krishnaswami
- 05.22 category theory for programmers
bartosz milewski
- 05.23 growing a language
guy steele. a talk about language design that builds its own vocabulary as it goes.
distributed systems
24 items- 06.01 designing data-intensive applications
martin kleppmann. the bible for modern backend systems.
- 06.02 mit 6.5840: distributed systems
robert morris. lectures on the classic papers, and a raft lab.
- 06.03 time, clocks, and the ordering of events in a distributed system
leslie lamport
- 06.04 the byzantine generals problem
lamport, shostak & pease
- 06.05 impossibility of distributed consensus with one faulty process
fischer, lynch & paterson. the flp result.
- 06.06 paxos made simple
leslie lamport
- 06.07 in search of an understandable consensus algorithm
ongaro & ousterhout. raft.
- 06.08 viewstamped replication revisited
liskov & cowling
- 06.09 a note on distributed computing
waldo et al.. why remote calls can't pretend to be local.
- 06.10 the google file system
ghemawat, gobioff & leung
- 06.11 mapreduce
dean & ghemawat
- 06.12 bigtable
chang et al.
- 06.13 the chubby lock service
mike burrows
- 06.14 dynamo
decandia et al.. eventual consistency at amazon.
- 06.15 cassandra
lakshman & malik
- 06.16 zookeeper
hunt et al.
- 06.17 spanner
corbett et al.. global transactions with atomic clocks.
- 06.18 large-scale cluster management at google with borg
verma et al.
- 06.19 conflict-free replicated data types
shapiro et al.
- 06.20 cap twelve years later
eric brewer
- 06.21 the log
jay kreps. what every engineer should know about real-time data's unifying abstraction.
- 06.22 notes on distributed systems for young bloods
jeff hodges
- 06.23 distributed systems for fun and profit
mikito takada
- 06.24 jepsen analyses
kyle kingsbury. real databases, tested against their consistency claims.
databases & storage
13 items- 07.01 database internals
alex petrov. storage engines and distributed databases, in depth.
- 07.02 a relational model of data for large shared data banks
e. f. codd
- 07.03 architecture of a database system
hellerstein, stonebraker & hamilton
- 07.04 readings in database systems
bailis, hellerstein & stonebraker. the red book.
- 07.05 cmu 15-445: database systems
andy pavlo
- 07.06 the log-structured merge-tree
o'neil et al.
- 07.07 the design and implementation of a log-structured file system
rosenblum & ousterhout
- 07.08 aries
mohan et al.. write-ahead logging and recovery.
- 07.09 bitcask
sheehy & smith. a log-structured hash table in six pages.
- 07.10 architecture of sqlite
- 07.11 let's build a simple database
connor stack. a sqlite clone in c.
- 07.12 the internals of postgresql
hironobu suzuki
- 07.13 use the index, luke
markus winand. sql indexing for developers.
networking
11 items- 08.01 a protocol for packet network intercommunication
cerf & kahn. the design of tcp/ip.
- 08.02 end-to-end arguments in system design
saltzer, reed & clark
- 08.03 congestion avoidance and control
van jacobson
- 08.04 the design philosophy of the darpa internet protocols
david clark
- 08.05 the quic transport protocol
langley et al.
- 08.06 computer networks: a systems approach
peterson & davie
- 08.07 computer networking: a top-down approach
kurose & ross
- 08.08 tcp/ip illustrated, volume 1
w. richard stevens
- 08.09 high performance browser networking
ilya grigorik
- 08.10 beej's guide to network programming
brian hall. sockets in c.
- 08.11 implement dns in a weekend
julia evans
concurrency & performance
12 items- 09.01 communicating sequential processes
c. a. r. hoare. the foundation of go's concurrency model.
- 09.02 monitors: an operating system structuring concept
c. a. r. hoare
- 09.03 the art of multiprocessor programming
herlihy & shavit
- 09.04 is parallel programming hard, and, if so, what can you do about it?
paul mckenney
- 09.05 rust atomics and locks
mara bos. memory ordering explained properly.
- 09.06 the free lunch is over
herb sutter
- 09.07 go concurrency patterns
rob pike
- 09.08 scalability! but at what cost?
mcsherry, isard & murray. a laptop beats the cluster more often than you'd think.
- 09.09 systems performance
brendan gregg. and his site: flame graphs, perf, ebpf.
- 09.10 latency numbers every programmer should know
colin scott
- 09.11 performance-aware programming
casey muratori
- 09.12 mechanical sympathy
martin thompson
algorithms & data structures
10 items- 10.01 introduction to algorithms
cormen, leiserson, rivest & stein. clrs.
- 10.02 the art of computer programming
donald knuth
- 10.03 the algorithm design manual
steven skiena
- 10.04 algorithms
jeff erickson
- 10.05 mit 6.006: introduction to algorithms
- 10.06 purely functional data structures
chris okasaki
- 10.07 skip lists: a probabilistic alternative to balanced trees
william pugh
- 10.08 algorithms for modern hardware
sergey slotin. algorithms tuned for real cpus and caches.
- 10.09 competitive programmer's handbook
antti laaksonen
- 10.10 visualgo
data structures and algorithms, animated.
theory of computation
07 items- 11.01 on computable numbers
alan turing
- 11.02 the complexity of theorem-proving procedures
stephen cook. np-completeness.
- 11.03 introduction to the theory of computation
michael sipser
- 11.04 computational complexity: a modern approach
arora & barak
- 11.05 mathematics for computer science
lehman, leighton & meyer
- 11.06 why philosophers should care about computational complexity
scott aaronson
- 11.07 gödel, escher, bach
douglas hofstadter
security & cryptography
11 items- 12.01 reflections on trusting trust
ken thompson. you can't trust code you didn't compile yourself. or the compiler.
- 12.02 new directions in cryptography
diffie & hellman
- 12.03 smashing the stack for fun and profit
aleph one
- 12.04 meltdown
lipp et al.
- 12.05 spectre attacks
kocher et al.
- 12.06 security engineering
ross anderson
- 12.07 a graduate course in applied cryptography
boneh & shoup
- 12.08 serious cryptography
jean-philippe aumasson
- 12.09 crypto 101
laurens van houtven
- 12.10 the cryptopals crypto challenges
break real crypto by implementing the attacks.
- 12.11 pwn.college
hands-on exploitation, from the basics up.
graphics & games
13 items- 13.01 ray tracing in one weekend
peter shirley
- 13.02 physically based rendering
pharr, jakob & humphreys
- 13.03 real-time rendering
akenine-möller et al.
- 13.04 a trip through the graphics pipeline
fabian giesen. what a gpu actually does with your draw call.
- 13.05 tinyrenderer
dmitry sokolov. write a software rasterizer in 500 lines.
- 13.06 learn opengl
joey de vries
- 13.07 scratchapixel
- 13.08 the book of shaders
gonzalez vivo & lowe
- 13.09 game programming patterns
robert nystrom
- 13.10 game engine architecture
jason gregory
- 13.11 handmade hero
casey muratori. a complete game, from scratch, on stream.
- 13.12 fabien sanglard's site
fabien sanglard. code reviews of doom, quake and the hardware they ran on.
- 13.13 playstation specifications (psx-spx)
martin korth. how the ps1 hardware actually worked, register by register.
machine learning
14 items- 14.01 neural networks: zero to hero
andrej karpathy. backprop to gpt, written from scratch.
- 14.02 deep learning
goodfellow, bengio & courville
- 14.03 dive into deep learning
zhang et al.
- 14.04 neural networks
3blue1brown
- 14.05 practical deep learning for coders
fast.ai
- 14.06 imagenet classification with deep convolutional neural networks
krizhevsky, sutskever & hinton
- 14.07 deep residual learning for image recognition
he et al.
- 14.08 attention is all you need
vaswani et al.. the transformer.
- 14.09 the illustrated transformer
jay alammar
- 14.10 retrieval-augmented generation for knowledge-intensive nlp tasks
lewis et al.
- 14.11 flashattention
dao et al.. attention made fast by respecting the memory hierarchy.
- 14.12 efficient memory management for large language model serving with pagedattention
kwon et al.. vllm: virtual memory ideas applied to the kv cache.
- 14.13 hidden technical debt in machine learning systems
sculley et al.
- 14.14 the bitter lesson
rich sutton
software design
14 items- 15.01 on the criteria to be used in decomposing systems into modules
david parnas. information hiding, before it had a name.
- 15.02 go to statement considered harmful
edsger dijkstra
- 15.03 the humble programmer
edsger dijkstra
- 15.04 hints for computer system design
butler lampson
- 15.05 programming as theory building
peter naur
- 15.06 no silver bullet
fred brooks
- 15.07 the mythical man-month
fred brooks
- 15.08 worse is better
richard gabriel. why simple, imperfect solutions often win.
- 15.09 things you should never do, part i
joel spolsky. don't rewrite from scratch.
- 15.10 out of the tar pit
moseley & marks. complexity is the enemy.
- 15.11 simple made easy
rich hickey
- 15.12 semantic compression
casey muratori
- 15.13 a philosophy of software design
john ousterhout. deep modules, and fighting complexity.
- 15.14 the pragmatic programmer
hunt & thomas
build your own
09 items- 16.01 build your own x
tutorials for building git, docker, databases and more from scratch.
- 16.02 build your own lisp
daniel holden. learn c by writing a lisp.
- 16.03 make a lisp
joel martin. the same lisp, in any language, in eleven steps.
- 16.04 write you a haskell
stephen diehl
- 16.05 web browser engineering
panchekha & harrelson
- 16.06 build your own text editor
jeremy ruten. kilo, about 1000 lines of c.
- 16.07 build your own redis
james smith
- 16.08 the missing semester of your cs education
mit. shells, editors, git, debugging.
- 16.09 teach yourself computer science
myers & shah. a self-study curriculum, one book per subject.