Project Sherlock

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

14

The 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

12

The mathematical limits of machines, established before the machines existed.

Automata Theory · Formal Languages & Grammars · Turing Machines · Computability & Decidability · The Halting Problem

Programming Languages

12

How 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

10

Turning source text into something a machine will execute.

Lexical Analysis · Parsing · Abstract Syntax Trees · Semantic Analysis · Intermediate Representations

Computer Architecture

12

The machine underneath the abstraction.

Instruction Set Architecture · Pipelining · Superscalar & Out-of-Order Execution · Cache Hierarchies · Memory Systems

Operating Systems

10

The program that manages every other program.

Processes & Threads · Scheduling · Virtual Memory · File Systems · Concurrency & Synchronisation

Computer Networks

10

Moving 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

12

Storing data so it survives, and querying it so the answer arrives.

Relational Model · SQL · Query Optimisation · Indexing & Storage Engines · Transactions & ACID

Distributed Systems

12

Systems where partial failure is the normal case.

Consistency Models · The CAP Theorem · Consensus Algorithms · Paxos & Raft · Replication

Security & Cryptography

15

Adversarial computing — the only discipline with an opponent.

Symmetric Cryptography · Public Key Cryptography · Hash Functions · Digital Signatures · Key Exchange & PKI

Software Engineering

14

Building systems that other people will have to maintain.

Software Architecture · Design Patterns · Testing & Test Strategy · Debugging · Version Control

Computer Graphics & Visualisation

10

Turning models into pixels, and data into pictures.

Rasterisation · Ray Tracing · Physically Based Rendering · Shading & Lighting Models · Geometric Modelling

Human-Computer Interaction

8

The part of the system that a person actually touches.

Interaction Design · Usability Testing · Accessibility · Information Architecture · User Research Methods

Formal Methods & Verification

8

Proving software correct rather than testing it and hoping.

Model Checking · Theorem Proving · Program Logics · Static Analysis · Abstract Interpretation

Quantum Computing

8

A 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

8

How 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

23

Start here

No prior grounding assumed.

  • As We May ThinkVannevar Bush, 1945· ≈8,000 words

    Proposes the memex, an associative trail-following machine, and anticipates hypertext by two decades.

    Essay
  • The Mythical Man-MonthFrederick P. Brooks Jr., 1975

    Adding people to a late software project makes it later, because communication cost grows quadratically.

    Book
  • The Cathedral and the BazaarEric S. Raymond, 1997

    Open, parallel development can outperform closed planning because bug-finding parallelises even when design does not.

    Essay

Then

Assumes you know the vocabulary.

  • Reflections 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.

    Essay
  • No 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.

    Essay
  • Operating 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.

    Book
  • Designing Data-Intensive ApplicationsMartin Kleppmann, 2017

    Synthesises storage, replication, consistency and stream processing into one coherent account of how modern data systems fail.

    Book
  • Go 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.

    Essay
  • Computer 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.

    Book
  • The Humane InterfaceJef Raskin, 2000

    Interfaces should be judged against how attention actually works; modes and confirmation dialogues are failures of design, not user error.

    Book
  • Computer 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.

    Book
  • Out 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.

    Paper

Go deeper

Primary sources and full treatments.

  • A Mathematical Theory of CommunicationClaude Shannon, 1948

    Defines information quantitatively and proves the limits of compression and error-free transmission over noisy channels.

    Paper
  • New Directions in CryptographyWhitfield Diffie & Martin Hellman, 1976· 11 pages

    Introduces public-key cryptography, making secure communication possible between parties who have never met.

    Paper
  • Time, 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.

    Paper
  • Structure 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.

    Book
  • Introduction 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.

    Book
  • Computer 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.

    Book
  • Quantum 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.

    Book
  • Compilers: 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.

    Book
  • The 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.

    Book
  • Physically 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.

    Book
  • Software 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.

    Course