The Bitter Lesson
Sutton distills a recurring lesson from AI: in the long run, methods that scale with computation beat hand-coded human knowledge.
Sutton distills a recurring lesson from AI: in the long run, methods that scale with computation beat hand-coded human knowledge.
Halevy, Norvig, and Pereira argue that for language and web-scale problems, large real-world datasets plus simple scalable models often beat elegant small-data theories.
Explains why "worse is better" wins in practice: simple implementations, rapid spread, and evolvability often beat perfect design.
Drawing on Bell Labs and the history of science, Hamming discusses how to choose important problems, manage yourself, build courage and habits, and do work of lasting value.
Brooks distinguishes essential from accidental difficulties in software engineering and explains why no single technology can deliver an order-of-magnitude productivity jump.
Naur argues that programming is not mainly producing text, but building a theory around the problem and solution that can be explained, extended, and revised.
Saltzer, Reed, and Clark formulate the end-to-end argument: many functions can only be implemented correctly at the endpoints, with lower layers serving mainly as performance optimizations.
Through self-reproducing programs and a backdoored compiler, Thompson shows why source review alone cannot fully establish trust in a toolchain or software supply chain.
A set of system design heuristics on keeping interfaces simple, making systems faster, and balancing fault tolerance against complexity.
Lamport's classic paper models event order with happened-before, then builds logical clocks, total ordering, mutual exclusion, and physical clock synchronization from it.
Ritchie and Thompson explain early UNIX: its file system, process model, shell, unified I/O abstraction, and why the system stayed small yet powerful.
Knuth argues that programming is both science and art: it needs formal foundations, but also taste, style, and aesthetic judgment.
Granovetter argues that weak ties, not strong ones, are often what connect groups and let information, opportunities, and coordination travel across social boundaries.
Using the KWIC example, Parnas shows that good modular decomposition hides change-prone design decisions rather than mirroring processing steps.
Hoare presents an axiomatic framework for proving partial program correctness, then uses it to discuss proofs, language definition, documentation, and portability.
Turing reframes "Can machines think?" through the imitation game, answers major objections, and turns the discussion toward learning machines.
Hayek argues that the central economic problem is not centralized calculation, but how to use dispersed local knowledge; the price system is the mechanism that does it.