Lectures: Tuesday 12:20, S6 (Tomáš Petříček)
Page in SIS: NPRG075
Grading: Credit
The goal of this course is to show students how to design better programming languages, developer tools, development frameworks and libraries. The course covers rigorous methods for programming language and library design, ranging from formal methods based on logic and programming language theory, to human-computer interaction methods based on qualitative and quantitative user studies.
The course will be taught in alternating years with Write your own tiny programming system(s)! (NPRG077), i.e., the course will not be taught in winter 2025/26.
Interested in programming langauges and systems?
- See Programming Languages and Systems page for more information about our work.
- Check out PRG • PRG, the new Prague programming languages and systems research network, sign up for email updates, come to our reading group and other events!
- Look through the student project ideas, which includes many programming system topics.
- We are looking for PhD and post-docs for a range of topics related to programming languages and systems. See the PhD opportunities page or talk to Tomas (petricek@d3s.mff.cuni.cz).
Slides
Slides will appear here throughout the semester. The online version uses Reveal.js and has a fancy two-directional structure. Use up/down and left/right arrows to navigate through this (or Esc to zoom out). If you are curious about what’s up next, check out slides from 2022/23. I expect to cover similar topics and follow similar structure, but there will be a couple of changes.
-
Programming language design - Introduction (PDF) - 1 October, 2024
For the next week: Read Notes on Notebooks by Jeremy Singer -
Learning from architecture and design (PDF) - 8 October, 2024
For the next week: Read Sections 2 and 5 of Varv: Reprogrammable Interactive Sofware -
Human-centric language design (PDF) - 15 October, 2024
For the next week: Read about Observables in the RxJS Primer -
Formal models of programming (PDF, notes) - 22 October, 2024
For the next week: Read about Understanding null safety in Dart -
Assignment & How to do programming language research (PDF) -
29 October, 2024
Video recording: Assignment & How to do programming language research (MP4)
For useful writing tips: Read How to write a great research paper by Simon Peyton-Jones -
Cancelled because of the CUNI Sports Day -
5 November, 2024 -
Mathematics and engineering of types (PDF) - 12 November, 2024
For the next week: Read about Information-rich programming in F# -
Unexpected perspectives on types (PDF) - 19 November, 2024
For the next week: Read (a part of) When Technology Became Language -
History and philosophy of programming - 26 November, 2024
Credit / zápočet
To get credit (zápočet) for the course, you will need to complete a small independent project (or a small group project). The project is to use one of the methodologies discussed in the lectures to study or design (an aspect of) a programming language, system, tool or a library.
The topic is flexible, but please talk to me first to agree on the topic. This could involve a formal model, usability analysis, design concept, study of a historical system, or anything else we agree on. You will need to produce a brief report (about 4 pages) about your project.
To discuss topic, please talk to me after the lecture or drop me an email to meet!
Deadlines
I’m happy to review the final version of your project anytime before the end of the summer semester, but I ask you to talk to me to agree on the project topic by the end of the winter semester and to start working on the project earlier, so that I can give you feedback on the project direction in time. As part of the feedback, I will give you a concrete list of what should appear in the final version.
- December 20, 2024 - Agree on a project topic and structure
- February 28, 2025 - Submit preliminary draft with some completed work
- Summer semester - Incorporate feedback & submit a final version
Course outline
- Introduction to programming research methods: What can we say about programming?
- Historical look at programming systems: Recovering lost programming ideas
- Design perspective on programming: Inventing new interactive programming approaches
- Evaluating programming system design: Case studies, user studies and empirical evaluation
- Mathematical perspective on programming: Formal models of programming languages
- Proofs about programming languages: Types and properties of functional languages
References
- Chasins, S.E., Glassman, E.L. and Sunshine, J., 2021. PL and HCI: better together. Communications of the ACM, 64(8), pp.98-106.
- Pierce, B.C., 2002. Types and programming languages. MIT Press.
- Carroll, J.M. ed., 2003. HCI models, theories, and frameworks: Toward a multidisciplinary science. Elsevier.
- Montfort, N., Baudoin, P., Bell, J., Bogost, I. and Douglass, J., 2014.
10 PRINT CHR$(205.5+RND(1));: GOTO 10
. MIT Press.