Lectures: Thursday 10:40, S11 (David Corfield, Jaroslav Nešetřil, Tomas Petricek)
Page in SIS: NPRG086
Grading: Exam
We take computer science concepts like functions, trees, and processes for granted, but where do they come from, how did they evolve, and do we even agree on what they mean? In this course, we will look at a number of computer science concepts from historical perspectives. We will follow the concepts as they change when they cross different disciplines and cross the boundaries between formal definitions, concrete implementations and intuitive metaphors.
This is a (most likely) one-off course jointly taught by David Corfield, Jaroslav Nešetřil, and Tomáš Petříček. We will look at entities from our respective domains from technical, historical and philosophical perspective. The course is planned as a two-semester course, followed by Functions, trees, processes (summer).
Lectures and materials
The following schedule is preliminary and subject to change. We are unfortunately not able to record the lectures, but will be sharing our slides and other materials here.
1. Welcome and introduction (1 October)
- HaPoC: The history and philosophy of computing - DC
- Introduction & History of computing (online) - TP
Note the slides also include materials on history of functional programming, but we did not have time for those. They will be used later!
2. Lecture cancelled due to travel (8 October)
3. Functions in mathematics (1 October) - (DC)
4. Functions in early days of programming (22 October) - (TP)
5. Functions and constructivism (29 October) - (DC)
6. Functional programming (5 November) - (TP)
7. Monads and their origins (12 November) - (DC)
8. Monads in functional programming (19 November) - (TP)
9. Monads, continuations, constructivism (26 November) - (DC)
10. Trees as a programming construct (3 December) - (TP)
11. Trees and their origins (10 December) - (JN)
12. Trees in discrete mathematics (17 December) - (JN)
13. Trees in discrete mathematics (7 January) - (JN)
Course sylabus
The seminar will focus on history of selected computer science concepts. Specific concepts will be decided at the start of the semmester and may include, for example:
- Functions - mathematical origins, subroutines in early computers, procedures and functions
- Trees - trees in mathematics, graph theory, tree as an abstract data type and structured data format
- Processes - early operating systems, processes in UNIX, distributed systems, process calculi
- Graphs - graphs in geometry and theoretical computer science, their representations, knowledge graphs
- Objects - simulations, objects and actors, object-oriented programming
- Types - logical origins, types in lambda calculus, abstract data types, type systems, dependent types
- Monads - category theoretical origins, semantics of effects, monads in programming languages
