The Early History of Smalltalk
Alan C. Kay
Recounts Smalltalk's design, arguing objects sending messages to each other, not classes or inheritance, was the idea that actually mattered.
link checked 17 Sept 2026How languages are designed, what they let you say, and what they prevent you from saying.
13 topics · 19 curated works
No prior grounding assumed.
The Early History of Smalltalk
Alan C. Kay · 1993
Recounts Smalltalk's design, arguing objects sending messages to each other, not classes or inheritance, was the idea that actually mattered.
+2 more at this level
Assumes you know the vocabulary.
Go To Statement Considered Harmful
Edsger W. Dijkstra · 1968
Unrestricted jumps destroy the correspondence between program text and program execution, which is what makes reasoning possible.
+5 more at this level
Primary sources and full treatments.
Structure and Interpretation of Computer Programs
Abelson, Sussman & Sussman · 1985
Programs are built from abstraction barriers, and the language you build is more important than the one you were given.
+9 more at this level
12 of 19 works
Alan C. Kay
Recounts Smalltalk's design, arguing objects sending messages to each other, not classes or inheritance, was the idea that actually mattered.
link checked 17 Sept 2026Raul Rojas
Works through lambda calculus as a minimal formal system in which functions alone encode numbers, booleans and recursion, and where computation is just substitution.
Ana Bell (MIT OpenCourseWare)
Teaches programming as computational problem-solving rather than syntax, introducing complexity and abstraction early enough that they shape how the beginner writes code.
link checked 17 Sept 2026Edsger W. Dijkstra
Unrestricted jumps destroy the correspondence between program text and program execution, which is what makes reasoning possible.
Assumes having written a loop and lost track of where control went; three pages, no mathematics
2 pageslink checked 17 Sept 2026John Hughes
Argues that laziness and higher-order functions are what make functional programs more modular, not the absence of assignment, using infinite lists and function combinators as evidence.
Paul R. Wilson
Surveys mark-sweep, copying and reference-counting collectors and argues the real design axis is not which algorithm but whether it moves objects and when it runs.
Alain Colmerauer & Philippe Roussel
Recounts how Prolog grew out of an attempt to make Robinson's resolution principle into a usable natural-language question-answering system, and why its control rule became depth-first.
Arie van Deursen, Paul Klint & Joost Visser
Surveys decades of work on languages built for one problem domain, arguing the recurring trade-off is expressiveness for that domain against the cost of building and maintaining it.
Erik Meijer & Peter Drayton
Argues the static-versus-dynamic typing debate is a false choice, because real languages gain from static checking wherever a type is known and from dynamic dispatch wherever it is not yet.
13 pageslink checked 17 Sept 2026Abelson, Sussman & Sussman
Programs are built from abstraction barriers, and the language you build is more important than the one you were given.
link checked 17 Sept 2026Christopher Strachey
Introduces the vocabulary of L-values versus R-values, and of a language's meaning as a mathematical function from programs to values, that later semantics work built on.
Barbara Liskov & Stephen Zilles
Argues a language should let a programmer define new types whose representation is hidden, so a data structure's implementation can change without touching the code that uses it.