Video summary
Edsger Dijkstra - Turing Award Lecture - The Humble Programmer - 1972 - No Intro
Main summary
Key takeaways
Main ideas, concepts, and lessons
-
Gratitude and origin story (Dijkstra’s entry into programming)
- Dijkstra thanks the audience and explains that he began in programming in 1952 (noting it was late/slow to emerge in the Netherlands).
- He describes a pivotal moment where a boss at the Mathematical Center (Amsterdam) advised him that computers were “here to stay” and encouraged him to help make programming a respectable discipline.
- He followed this advice, finishing physics study, but later faced bureaucracy:
- In 1957, after marrying, Amsterdam marriage rules required listing a profession.
- The authorities did not recognize “programmer” as a profession (even categorizing physics differently), reinforcing how slow the field’s legitimacy was.
-
How early hardware shaped early programming
- Early automatic electronic computers were:
- Unique, single-copy machines
- Mostly located in experimental laboratory settings
- Programmers were “hardly noticed” because:
- Machines were bulky and required constant maintenance
- Their work was invisible compared to the spectacular hardware demonstrations
- Programmers viewed their work as:
- Having only local significance (because the machines were unique and had limited lifetime)
- Constraints encouraged cleverness:
- Machines were often slow with small memory
- Programmers obtained intellectual satisfaction by squeezing solutions into tight hardware limits
- Early automatic electronic computers were:
-
Two competing early views of programming
- View A: A competent programmer is puzzle-minded and loves clever tricks.
- View B: Programming is mainly about optimizing computational efficiency.
-
From hardware evolution to the “software crisis”
- Programming did not become easier as hardware improved.
- Instead, “the electronic industry hasn’t solved a single problem—it has only created them.”
- Key “minor” causes from hardware structure:
- I/O interrupts at unpredictable moments break the earlier deterministic model
- Multi-level storage complicates memory-management strategies
- Main cause:
- Hardware power increased by orders of magnitude, but society’s ambitions to apply computers grew just as fast.
- The result: programmers had to realize bigger, more complex systems than before—leading to the software crisis.
-
Problems in “third generation” computers
- Dijkstra criticizes certain design goals and outcomes:
- The systems can spend much performance on internal housekeeping
- Designs may be hard to program due to enforcement of early binding decisions
- He describes these flawed designs as setting progress of computing science back by roughly 10 years.
- He argues that people’s belief in these designs often comes from observing sales volume—similar to faulty reasoning in other domains (e.g., a cigarette-smoker analogy).
- He says he wrote but did not submit a critical computer review to the ACM due to fear and lack of general criteria—confessing it was cowardice and urging that machine reviews would indicate maturity in the community.
- Dijkstra criticizes certain design goals and outcomes:
-
Tooling influences thought
- Dijkstra emphasizes that computing tools shape users’ thinking habits—often more strongly than assumed.
-
Software “stepping stones” / major developments
- Closed subroutines
- Presented as one of the greatest inventions in software
- Survived generations and supports abstraction patterns
- Underestimated in third-generation designs due to overhead concerns
- FERMAT / related work (mentions “fertrand”)
- A bold project; praised despite later-discovered shortcomings
- LISP
- Stable foundation principles
- Enabled sophisticated applications
- Joked as “the most intelligent way to misuse a computer,” highlighting its liberating effect for thought
- ARGOS 16
- Stressed that some languages (via implementations) tether users to specific machine details (e.g., octal/hex dumps)
- ALGOL 60
- Praised for pushing implementation-independent abstraction
- Highlights power of:
- BNF (formal grammar notation)
- precise English phrasing by skilled authors (names mentioned)
- Criticized for weaknesses:
- syntax can be over-elaborate / not systematic
- parameter mechanisms may demand strong programmer discipline
- PL/I
- Criticized as overly large and complex, likened to “flying a plane with thousands of controls”
- Described as akin to addiction, where users ask for more features rather than simplifying
- Closed subroutines
-
Proposed future direction: revolution toward reliable software
- Dijkstra argues for a major shift:
- Reliable software should become cheaper by:
- avoiding bugs at the start, rather than relying on debugging
- enabling changes such that “more effective programmers” don’t waste time debugging or introducing bugs
- Reliable software should become cheaper by:
- This change is framed as revolutionary, requiring:
- a wider societal recognition of need for reliability
- strong economic necessity (hardware gets cheaper, so software quality cost structure must improve)
- technical feasibility
- Dijkstra argues for a major shift:
-
Technical feasibility: “intellectually manageable programs” + correctness
- Dijkstra asserts that it is feasible if we restrict programming to programs that are intellectually manageable.
- He presents six arguments supporting feasibility (detailed below).
Detailed list of Dijkstra’s “six arguments” for technical feasibility (as presented)
-
Subset restriction simplifies choice
- If programmers only consider intellectually manageable programs, the alternative space becomes far easier to manage.
-
Restrictions define the solution space once and for all
- By fixing the subset of acceptable programs, the “search space” becomes disciplined—reducing confusion and wasted effort.
-
Correctness and proofs should grow with the program
- Testing can show presence of bugs but cannot prove absence.
- The effective path is:
- construct a proof structure first,
- then build programs to satisfy those proof requirements,
- letting correctness proofs and program development proceed “hand in hand.”
-
Abstraction and proof-oriented structure reduce the cognitive scaling problem
- He rejects any presumed “law” that mental effort scales as the square of program length.
- Key mechanism is abstraction:
- Abstraction is not vagueness; it creates a new semantic level that can remain precise.
- He also notes a practical byproduct:
- identification of patterns of abstraction used in programming (so that progress could occur faster than people think).
-
Tools and languages shape what humans can think
- Dijkstra argues programming languages and tools function as “yardsticks” for cognition.
- Example: terminal-equipped languages invite clever-trick behaviors (“one-liners”).
- He criticizes baroque language complexity (as mentally unmanageable).
- He shares an experiment where experienced volunteers missed an elegant repetition solution—because their mental model of repetition was tied to a particular controlled-variable pattern.
-
Hierarchy and factoring enable solvable problems
- He emphasizes that only problems admitting a nicely factored solution can be solved satisfactorily.
- Hierarchical organization is essential to manage complexity.
- A major claim is that revolutions are possible when technical approaches align with factoring and hierarchy.
-
A warning about mistaking tool inadequacy for the true difficulty
- He warns that improving tools may remove some “circumstantial cumbersomeness,” but programming will remain hard.
- Once freed from current limitations, people will face deeper complexity beyond current reach.
-
Expected obstacles to the revolution
- Likely resistance:
- education institutions (training inertia, methodology vs knowledge dissemination effects)
- conservative computer users who value legacy programs
- He argues training methodology might enlarge capability gaps by primarily improving already-capable people.
- There’s skepticism that society will allow enough effective education to prepare competent programmers.
- Likely resistance:
-
Closing philosophical lesson: humility and elegance
- Computers are unprecedented tools for intellectual challenge via hierarchical systems.
- Dijkstra concludes with a core prescription:
- better programming comes from approaching the task with humility,
- using modest and elegant programming languages,
- and respecting human intellectual limits.
Speakers / sources featured (named or clearly referenced)
- Edsger W. Dijkstra — main speaker (the lecture)
- iPhone weinharden — referenced as Dijkstra’s boss at the Mathematical Center in Amsterdam (name appears with subtitle errors)
- Peter Naur — referenced in connection with ALGOL 60 and careful English phrasing
- Noam Chomsky / “Beckersnauer / BNF” reference
- The subtitles indicate BNF and appear to mis-transcribe associated names (likely Backus and Naur for BNF/ALGOL context)
- ACM (Association for Computing Machinery) — referenced as the publication venue Dijkstra considered for a review
- Information Cassettes Incorporated — referenced regarding the copyrighted cassette
Note: Some names are likely corrupted by auto-subtitle errors; the associations above reflect the clearest identifiable entities mentioned in the transcript.