Lectures: Mondays 12:20, S7 (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.
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).
- Programming language design - Introduction (PDF) - 10 October, 2022
For the next week: Read Notes on Notebooks by Jeremy Singer - Learning from architecture and design (PDF) - 17 October, 2022
For the next week: Read Sections 2 and 5 of Varv: Reprogrammable Interactive Sofware - Human-centric language design (PDF) - 24 October, 2022
For the next week: Read about Observables in the RxJS Primer - Formal models of programming (PDF) - 31 October, 2022
For the next week: Read about Understanding null safety in Dart - Mathematics and engineering of types (PDF) - 7 November, 2022
For the week after the next: Read about Information-rich programming in F# - Getting everything wrong without doing anything right! or The perils of large-scale analysis of GitHub data - 14 November, 2022
Guest lecture by Jan Vitek - Unexpected perspectives on types (PDF) - 21 November, 2022
For the next week: Read (a part of) When Technology Became Language - History and philosophy of programming (PDF) - 28 November, 2022
For the next week: Read chapter “15 REM VARIATIONS IN BASIC” of 10 PRINT CHR$(205.5+RND(1)); : GOTO 10 - Close look at past and today’s programs (PDF) - 5 December, 2022
For the week after the next: Read Spreadsheets are Code (SciHub) - Assignment & How to do programming language research (PDF) - 12 December, 2022
For useful writing tips: Read How to write a great research paper by Simon Peyton-Jones - Heuristic evaluation of programming systems (PDF) - 19 December, 2022
Optional if you are interested: Read Analysis of Block-based languages (SciHub) - Making programming easier and learnable (PDF) - 2 January, 2023 (online)
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 5 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 (31 June 2023), 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.
- January 15, 2023 (
January 8, 2023) - Agree on a project topic and structure
Extended by a week to allow for consultations in the 2nd week of January - February 28, 2023 - 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.