Lectures: Tuesday 10:40, S10 (Tomas Petricek)
Page in SIS: NPRG088
Grading: Credit
Programming originated at the intersection of many disciplines, including logic, electrical engineering, business management and psychology. Different cultures of programming, rooted in those disciplines, continue shaping programming to this day. They remain at the core of current disagreements about programming, but also productively contribute to shared concepts. In this course, we will look at programming from a historical perspective, examining foundational works of the field through the lens of different cultures of programming.
This is a one-off course based on my open-access book Cultures of Programming published by Cambridge University Press in December 2025. Also check out the exhibition in Galeria Chodba (Malá strana, ground floor)!
Expectations and credits
The course will combine lectures with discussions about notable past papers on programming. I’ll ask you to read some old papers and briefly present them and discuss what interesting and surprising things can be found there! The exact arrangement will depend on the number of students attending and interest in getting credits for the course :-).
More details added later
- After some of the lectures (likely more than half, but not all), I will give you an old academic paper or another document. I’ll ask you to look at the document and fill out a brief questionaire. You are not expected to read the whole document, but you should look through it and read a few sections so that you can give good answers in the questionnaire.
- The questionnaire (same for all assignments) is available here.
- In the lecture, I will refer to some of your answers and we will discuss interesting points together.
- To get credits for the course, you should submit your answers for 2/3 of the reading assignmens and actively participate in the discussions. In case you are not able to do this, get in touch to discuss alterntive options (e.g., writing a short essay on a suitable topic).
Assignments so far
- FORTRAN manual - fill out the questionnaire by 5 October!
Lectures and materials
Lecture 1 (29 September)
- Part 1: History of programming and why it matters today (PDF)
- Part 2: Hackers, engineers, managers, mathematicians and humanists (PDF)
- Assignment for the (one after the) next lecture: Look at the FORTRAN manual and fill out the review form
Lecture 2 (6 October)
- Lecture cancelled due to conference travel
Lecture 3 (13 October)
- Part 3: The invention of a programming language (PDF)
- Part 4 (first half): Mathematical science of computation and structured programming (PDF)
- Assignment for the next lecture: Look at the Social Processes and Proofs of Theorems and Programs paper and fill out the review form. This is a remarkably timely paper, so it is worth reading in full (unlike the other materials we’ll look at). It is not a system or language description, but you can still identify the (i) key idea of the paper, (ii) what aspects of the argument are still relevant, and (iii) what is unexpected or dated.
Lecture 4 (20 October)
- Structuring programs and teams
- Limits of formal verification
More information to be added throughout the semester!
Course sylabus
The course will mostly follow the structure & material from the book.
Cultures of programming
- Five ways of thinking about programming
- Clashes and collaborations around programming
- Framing the history an philosophy of programming
Mathematization of programming
- Programs as formal mathematical entities
- Algol 60 and the birth of programming languages
- Structured programming and the goto debate
- Program verification: proofs, their limits, and social processes
Interactive programming
- Hackers, time-sharing, and the hands-on imperative
- Augmenting human intellect and personal dynamic media
- Home computing and the birth of an industry
Software engineering
- The software crisis and disciplinary responses
- Testing, debugging, and how software became reliable without proof
- Software development methodologies and their cultures
Programming with types
- From data structuring to lightweight formal methods
- Type theory and automated mathematics
- Pluralism and scientific progress in type systems
Object-oriented programming
- Origins of objects: Simula, Smalltalk, and beyond
- From mathematics and humanism to engineering and management
- Struggle for control of the OOP concept
