Lecture notes — The Birth of Programming Languages
ver. 1.1.0, birth_of_programming_languages
← The Birth of Programming Languages
ver. 1.1.0 · 2026-09-13 03:12 UTC
Where this fits
The previous unit ended with two mathematical abstractions: Turing’s machine and Church’s lambda calculus, neither built from anything physical. This unit begins with the machine that turned one of them into hardware, and then surveys four decades of the languages written to program it.
Learning outcomes
explain-von-neumann-architecture— Explain how EDVAC turned Turing’s abstract machine into a physical one, and name the architecture that resulted.trace-language-paradigm-lineage— Trace the main line of programming-language paradigms from FORTRAN through the 1970s and 80s.place-lisp-and-functional-lineage— Place Lisp’s invention and follow its functional-programming lineage forward to Scheme.place-oop-lineage— Place Alan Kay’s invention of object-oriented programming and its extension into C++.describe-industrial-era-languages— Describe what problem each major 1990s language was built to solve.explain-sql-as-dsl— Explain SQL as a domain-specific language, and why it is the field’s most successful one.recognize-recurring-paradigms— Recognize that this survey previews the paradigms studied formally later in the course.
Concepts introduced
- von Neumann Architecture — the CPU/memory/data-bus structure introduced with EDVAC in 1946, still the basis of processor design.
- EDVAC — the vacuum-tube machine von Neumann designed as a physical implementation of the universal Turing machine.
- FORTRAN — John Backus’s 1953 high-level language, the ancestor of BASIC, C, C++, Java and Python.
- Lisp — John McCarthy’s 1958 language, introducing dynamic typing, garbage collection and macros.
- Object-Oriented Programming — Alan Kay’s 1972 paradigm, organizing programs around objects rather than functions and logic.
- Functional Programming — the paradigm rooted in Lisp, extended through Scheme, and formalized in pure, statically typed form by Haskell.
- Domain-Specific Language (DSL) / SQL — a language built for one problem domain, exemplified by SQL for relational databases.
From theory to hardware
John von Neumann designed the Electronic Discrete Variable Automatic Computer, EDVAC, in 1946, using vacuum tubes to physically implement a universal Turing machine.
EDVAC established the von Neumann architecture: a CPU, memory, and a data bus connecting them. It introduced binary data encoding and the first machine code instruction set, and its structure remains the architectural blueprint for nearly every modern processor.

John von Neumann, who designed EDVAC in 1946, using vacuum tubes to physically implement a universal Turing machine. The architecture it established — a CPU, memory, and a data bus connecting them — remains the blueprint for nearly every modern processor.
Learning outcomes
- explain-von-neumann-architecture Explain how EDVAC turned Turing’s abstract machine into a physical one, and name the architecture that resulted.
Concepts
- von-neumann-architecture the CPU, memory and data-bus structure introduced with EDVAC, still the blueprint for contemporary processor design
- edvac von Neumann’s 1946 vacuum-tube machine, a physical implementation of the universal Turing machine
FORTRAN: the first high-level language
John Backus drafted FORTRAN (Formula Translation) at IBM Research in 1953; its first compiler was completed in 1957. Backus received the 1977 Turing Award for his work on practical high-level programming systems.
FORTRAN’s abstraction model derived from the 1936 Turing machine. It directly influenced BASIC, C, C++, Java and Python, and its standard continues to be revised, with Fortran 2018 the most recent version named in the source.

John Backus, who drafted FORTRAN at IBM Research in 1953; its first compiler was completed in 1957. He received the 1977 Turing Award for his work on practical high-level programming systems.
Learning outcomes
- trace-language-paradigm-lineage Trace the main line of programming-language paradigms from FORTRAN through the 1970s and 80s.
Concepts
- fortran Backus’s 1953 language, drawing its abstraction from the Turing machine and directly influencing BASIC, C, C++, Java and Python
Lisp and the functional thread
John McCarthy released Lisp (List Processing) in 1958 — the second-oldest high-level programming language still in use. Beyond Lisp itself, McCarthy contributed to ALGOL and time-sharing, and invented garbage collection.
Lisp introduced dynamic memory allocation, dynamic typing, concurrency, and macros. Its successors include Common Lisp, Racket, and Clojure.
MIT Professor Gerald Sussman and his PhD student Guy Steele co-invented Scheme in 1975 as an industrial-scale Lisp implementation. Steele later invented the Java programming language, in 1995 — the same person contributing to both the Lisp lineage and to a mainstream imperative language.

John McCarthy, who released Lisp in 1958 — the second-oldest high-level programming language still in use. Beyond Lisp itself he contributed to ALGOL and time-sharing, and invented garbage collection.

Gerald Sussman, MIT professor, who with his PhD student Guy Steele co-invented Scheme in 1975 as an industrial-scale Lisp implementation. Steele went on to invent Java in 1995 — the same person contributing to both the Lisp lineage and to a mainstream imperative language.
Learning outcomes
- place-lisp-and-functional-lineage Place Lisp’s invention and follow its functional-programming lineage forward to Scheme.
Concepts
- lisp McCarthy’s 1958 language, introducing dynamic typing, garbage collection and macros, with Common Lisp, Racket and Clojure among its successors
- functional-programming pioneered by McCarthy’s Lisp and continued as an industrial-scale implementation in Sussman and Steele’s Scheme
C and the systems thread
Brian Kernighan was born in Toronto, earned a B.Sc. in Engineering Physics from the University of Toronto, and a PhD in Electrical Engineering from Princeton. He contributed to the invention of the C programming language in 1972, and later co-authored prominent computer science texts, including a book on the Go programming language in 2015.
C continues the imperative, compiled lineage FORTRAN began. It is the direct ancestor of C++, and by influence, of Java and much of the C-family syntax used across the industry.

Brian Kernighan, born in Toronto, with a B.Sc. in Engineering Physics from the University of Toronto and a PhD in Electrical Engineering from Princeton. He contributed to the invention of C in 1972, and later co-authored prominent computer science texts, including a book on Go in 2015.
Learning outcomes
- trace-language-paradigm-lineage Trace the main line of programming-language paradigms from FORTRAN through the 1970s and 80s.
Object-oriented programming and C++
Alan Kay holds a B.Sc. in molecular biology from the University of Colorado Boulder and a PhD in Computer Science, 1969, from the University of Utah. At Xerox PARC in 1972, he pioneered the object-oriented programming paradigm and developed the Smalltalk programming language — organizing software design around data objects rather than functions and logic.
Bjarne Stroustrup earned a Master’s in Mathematics from Aarhus University in 1975 and a PhD in Computer Science from Cambridge University in 1979. That same year, he invented C++, combining object-oriented abstractions with C’s systems-level performance.

Alan Kay, holding a B.Sc. in molecular biology and a 1969 PhD in Computer Science from the University of Utah. At Xerox PARC in 1972 he pioneered the object-oriented paradigm and developed Smalltalk, organizing software design around data objects rather than functions and logic.

Bjarne Stroustrup, with a Master’s in Mathematics from Aarhus University in 1975 and a PhD in Computer Science from Cambridge in 1979. That same year he invented C++, combining object-oriented abstractions with C’s systems-level performance.
Learning outcomes
- place-oop-lineage Place Alan Kay’s invention of object-oriented programming and its extension into C++.
Concepts
- object-oriented-programming Kay’s 1972 paradigm organizing software around data objects, significantly influencing C++, Java and Python
Haskell and pure functional programming
Simon Peyton Jones, holding a Diploma in Computer Science from Cambridge, co-invented Haskell in 1990 as a pure functional language with a static type system. He served as lead developer of the Glasgow Haskell Compiler (GHC), and joined Epic Games as an Engineering Fellow in 2021.
Haskell marks the functional thread’s other endpoint from Lisp. Where Lisp is dynamically typed and permits side effects freely, Haskell is statically typed and pure — a formalization of functional programming distinct from the dynamic, effectful model Lisp and Scheme represent.

Simon Peyton Jones, holding a Diploma in Computer Science from Cambridge, who co-invented Haskell in 1990 as a pure functional language with a static type system. He served as lead developer of the Glasgow Haskell Compiler, and joined Epic Games as an Engineering Fellow in 2021.
Learning outcomes
- place-lisp-and-functional-lineage Place Lisp’s invention and follow its functional-programming lineage forward to Scheme.
Concepts
- functional-programming formalized into a pure, statically typed form by Peyton Jones’s Haskell, contrasting with Lisp and Scheme’s dynamic, effectful model
The industrial era
Guido van Rossum invented Python in 1991. He helped build a global open-source developer community, and Python became the primary language for data science and machine learning by the 2000s.
Brendan Eich, at Netscape in 1995, intended to bring Scheme-like programming into web browsers. The result, produced in September 1995, was called LiveScript and later renamed JavaScript for marketing reasons. Eich co-founded the Mozilla project in 1998.
Yukihiro Matsumoto, holding an Information Science degree from the University of Tsukuba, invented the object-oriented scripting language Ruby in December 1995.
Rasmus Lerdorf, a 1983 graduate of the University of Waterloo, released PHP in 1995 — originally standing for “Personal Home Page” — representing the earliest dedicated web-centric server scripting language.

Guido van Rossum, who invented Python in 1991 and helped build a global open-source developer community around it. Python became the primary language for data science and machine learning by the 2000s.

Brendan Eich, who at Netscape in 1995 intended to bring Scheme-like programming into web browsers. The result, produced that September, was called LiveScript and later renamed JavaScript for marketing reasons. He co-founded the Mozilla project in 1998.

Yukihiro Matsumoto, holding an Information Science degree from the University of Tsukuba, who invented the object-oriented scripting language Ruby in December 1995.

Rasmus Lerdorf, a 1983 graduate of the University of Waterloo, who released PHP in 1995 — originally standing for “Personal Home Page” — the earliest dedicated web-centric server scripting language.
Learning outcomes
- describe-industrial-era-languages Describe what problem each major 1990s language was built to solve.
SQL as a domain-specific language
Donald Chamberlin, a Stanford PhD, worked at IBM Research from 1974 to as late as 2016 co-inventing Structured Query Language, SQL — recognized as the first widely successful domain-specific language built specifically for relational database management engines.

Donald Chamberlin, a Stanford PhD who worked at IBM Research from 1974, co-inventing Structured Query Language. SQL is recognized as the first widely successful domain-specific language, built specifically for relational database management engines.
Learning outcomes
- explain-sql-as-dsl Explain SQL as a domain-specific language, and why it is the field’s most successful one.
Concepts
- domain-specific-language SQL, co-invented by Chamberlin at IBM Research, is the field’s premier example of a language built for one problem domain rather than general-purpose computing
The map you now have
Three threads run through this unit, and each is where a later part of the course returns to it.
The functional thread runs from Church’s lambda calculus, in the previous unit, through McCarthy’s Lisp to Sussman and Steele’s Scheme; Clojure, a modern Lisp, is studied in depth two modules from now. Peyton Jones’s Haskell marks the thread’s purer, statically typed endpoint.
The object-oriented thread runs from Kay’s Smalltalk to Stroustrup’s C++; the Kotlin module, later in the course, builds an object system on this lineage, alongside the domain-specific-language construction technique SQL exemplifies.
Underlying both threads is the von Neumann architecture: CPU, memory, and a data bus, the target every one of these languages ultimately compiles or interprets down to, regardless of which paradigm it presents to the programmer.
Learning outcomes
- recognize-recurring-paradigms Recognize that this survey previews the paradigms studied formally later in the course.
- place-lisp-and-functional-lineage Place Lisp’s invention and follow its functional-programming lineage forward to Scheme.
- place-oop-lineage Place Alan Kay’s invention of object-oriented programming and its extension into C++.
- explain-sql-as-dsl Explain SQL as a domain-specific language, and why it is the field’s most successful one.
Conclusion
EDVAC turned Turing’s paper machine into hardware, and the architecture it produced has not changed since.
CPU, memory, and a data bus. Every language surveyed in this unit ultimately compiles or interprets down to instructions moving across that bus, regardless of the paradigm it presents to the programmer.
FORTRAN, Lisp and Smalltalk each opened a lineage this course returns to.
FORTRAN’s compiled, imperative model runs through C to C++. Lisp’s functional model runs through Scheme to Clojure. Smalltalk’s object model runs through C++ to the object system Kotlin builds on.
The 1990s produced a language for each new problem the web and cheap computing created.
Python, JavaScript, Ruby and PHP each answered a need the previous generation of languages was not built for — an interactive browser, a data-science ecosystem, web-centric scripting.
SQL is the clearest example of a domain-specific language succeeding by doing one job only.
Built for querying relational data and nothing else, it has had no general-purpose challenger in its role for fifty years — the trade the Kotlin module’s DSL-construction technique later imitates.
The next unit, The Limits of Computation, returns to the boundary Gödel and Church located in the first unit of this module — not every problem has an algorithm — and states the negative answer to Hilbert’s Entscheidungsproblem plainly, before the two Turing Machine units that follow it, still in this module, supply the tools to prove it.
References
- Course material, Ken Pu