Technology & Engineering
Computer Science
What can be computed, how fast, and how to build machines and programs that do it reliably.
16 fields · 175 topics · 23 curated works
Fields within Computer Science
Algorithms & Data Structures
14The core toolkit — and the difference between a program that finishes and one that does not.
Asymptotic Analysis · Sorting & Searching · Arrays, Lists & Hash Tables · Trees & Balanced Search Trees · Heaps & Priority Queues
Theory of Computation
12The mathematical limits of machines, established before the machines existed.
Automata Theory · Formal Languages & Grammars · Turing Machines · Computability & Decidability · The Halting Problem
Programming Languages
12How languages are designed, what they let you say, and what they prevent you from saying.
Language Design Principles · Type Systems · Static vs Dynamic Typing · Functional Programming · Object-Oriented Programming
Compilers & Interpreters
10Turning source text into something a machine will execute.
Lexical Analysis · Parsing · Abstract Syntax Trees · Semantic Analysis · Intermediate Representations
Computer Architecture
12The machine underneath the abstraction.
Instruction Set Architecture · Pipelining · Superscalar & Out-of-Order Execution · Cache Hierarchies · Memory Systems
Operating Systems
10The program that manages every other program.
Processes & Threads · Scheduling · Virtual Memory · File Systems · Concurrency & Synchronisation
Computer Networks
10Moving bits between machines that do not trust each other.
The OSI & TCP/IP Models · Routing & Switching · TCP & Congestion Control · DNS · HTTP & Web Protocols
Databases & Data Systems
12Storing data so it survives, and querying it so the answer arrives.
Relational Model · SQL · Query Optimisation · Indexing & Storage Engines · Transactions & ACID
Distributed Systems
12Systems where partial failure is the normal case.
Consistency Models · The CAP Theorem · Consensus Algorithms · Paxos & Raft · Replication
Security & Cryptography
15Adversarial computing — the only discipline with an opponent.
Symmetric Cryptography · Public Key Cryptography · Hash Functions · Digital Signatures · Key Exchange & PKI
Software Engineering
14Building systems that other people will have to maintain.
Software Architecture · Design Patterns · Testing & Test Strategy · Debugging · Version Control
Computer Graphics & Visualisation
10Turning models into pixels, and data into pictures.
Rasterisation · Ray Tracing · Physically Based Rendering · Shading & Lighting Models · Geometric Modelling
Human-Computer Interaction
8The part of the system that a person actually touches.
Interaction Design · Usability Testing · Accessibility · Information Architecture · User Research Methods
Formal Methods & Verification
8Proving software correct rather than testing it and hoping.
Model Checking · Theorem Proving · Program Logics · Static Analysis · Abstract Interpretation
Quantum Computing
8A different model of computation, with a different complexity landscape.
Qubits & Quantum Gates · Quantum Circuits · Shor's Algorithm · Grover's Algorithm · Quantum Error Correction
History of Computing
8How we got from mechanical calculators to whatever this is.
Babbage & Lovelace · The Turing Era · Early Mainframes · The Personal Computer Revolution · The Birth of the Internet
Reading in Computer Science
23Start here
No prior grounding assumed.
- EssayAs We May ThinkVannevar Bush, 1945· ≈8,000 words
Proposes the memex, an associative trail-following machine, and anticipates hypertext by two decades.
- BookThe Mythical Man-MonthFrederick P. Brooks Jr., 1975
Adding people to a late software project makes it later, because communication cost grows quadratically.
- EssayThe Cathedral and the BazaarEric S. Raymond, 1997
Open, parallel development can outperform closed planning because bug-finding parallelises even when design does not.
Then
Assumes you know the vocabulary.
- EssayReflections on Trusting TrustKen Thompson, 1984· 3 pages
You cannot trust code you did not totally create yourself — a compiler can hide a backdoor that survives inspection of its own source.
- EssayNo Silver Bullet: Essence and Accidents of Software EngineeringFrederick P. Brooks Jr., 1986
Software's essential complexity cannot be removed by tooling, so no single technique will deliver an order-of-magnitude gain.
- BookOperating Systems: Three Easy PiecesRemzi & Andrea Arpaci-Dusseau, 2014· Free
Reduces the whole subject to virtualisation, concurrency and persistence, which is the right decomposition and free to read.
- BookDesigning Data-Intensive ApplicationsMartin Kleppmann, 2017
Synthesises storage, replication, consistency and stream processing into one coherent account of how modern data systems fail.
- EssayGo To Statement Considered HarmfulEdsger W. Dijkstra, 1968· 2 pages
Unrestricted jumps destroy the correspondence between program text and program execution, which is what makes reasoning possible.
- BookComputer Networks: A Systems ApproachLarry Peterson & Bruce Davie, 1996
Teaches networking as layered system design rather than as protocol trivia, so the reasons for the layers survive the details.
- BookThe Humane InterfaceJef Raskin, 2000
Interfaces should be judged against how attention actually works; modes and confirmation dialogues are failures of design, not user error.
- BookComputer Networking: A Top-Down ApproachJames F. Kurose & Keith W. Ross, 2000
Teaches networking from the application layer downwards, so protocols are met as answers to problems you already understand.
- PaperOut of the Tar PitBen Moseley & Peter Marks, 2006· 66 pages
Complexity is the single greatest source of software failure, and most of it is accidental state that could be designed away.
Go deeper
Primary sources and full treatments.
- PaperA Mathematical Theory of CommunicationClaude Shannon, 1948
Defines information quantitatively and proves the limits of compression and error-free transmission over noisy channels.
- PaperNew Directions in CryptographyWhitfield Diffie & Martin Hellman, 1976· 11 pages
Introduces public-key cryptography, making secure communication possible between parties who have never met.
- PaperTime, Clocks, and the Ordering of Events in a Distributed SystemLeslie Lamport, 1978· 8 pages
Defines happened-before and logical clocks, giving distributed systems a usable notion of order without shared time.
- BookStructure and Interpretation of Computer ProgramsAbelson, Sussman & Sussman, 1985· Free
Programs are built from abstraction barriers, and the language you build is more important than the one you were given.
- BookIntroduction to AlgorithmsCormen, Leiserson, Rivest & Stein, 1990
The reference: every standard algorithm with its correctness argument and cost, which is what separates knowing one from being able to choose one.
- BookComputer Architecture: A Quantitative ApproachJohn L. Hennessy & David A. Patterson, 1990
Insists that architecture decisions be justified by measurement, and in doing so turned processor design from craft into engineering.
- BookQuantum Computation and Quantum InformationMichael Nielsen & Isaac Chuang, 2000
The founding textbook of the field, and careful about what quantum computers would and would not actually make faster.
- BookCompilers: Principles, Techniques, and ToolsAho, Lam, Sethi & Ullman, 1986
The standard compiler text, and the clearest demonstration that parsing and translation are solved problems with a real theory behind them.
- BookThe Design of the UNIX Operating SystemMaurice J. Bach, 1986
Walks through the UNIX kernel — file system, process control, I/O — as one coherent design rather than a pile of system calls.
- BookPhysically Based RenderingMatt Pharr, Wenzel Jakob & Greg Humphreys, 2004
A complete renderer presented as literate code alongside the optics it implements — theory and working program in the same document.
- CourseSoftware FoundationsBenjamin C. Pierce et al., 2007· Free
Teaches logic, proof and programming-language theory by making you build the proofs in a proof assistant, where hand-waving is impossible.