Course summary
CS 242 explores models of computation, both old, like functional programming with the lambda calculus (circa 1930), and new, like memory-safe systems programming with Rust (circa 2010). The study of programming languages is equal parts systems and theory, looking at how a rigorous understanding of the syntax, structure, and semantics of computation enables formal reasoning about the behavior and properties of complex real-world systems. In light of today’s Cambrian explosion of new programming languages, this course also seeks to provide a conceptual clarity on how to compare and contrast the multitude of programming languages, models, and paradigms in the modern programming landscape. See the schedule below for full topic list. Prerequisites: 103, 110.
Previous iterations of this course: Fall 2018, Fall 2017.
For more on this course’s design, read my SNAPL’19 paper:
“From Theory to Systems: A Grounded Approach to Programming Language Education”
Course info
- Lectures: Mon & Wed 4:30pm-5:50pm,
Skilling Auditorium - Links: Gradescope, Campuswire, feedback
Instructor
Course assistants
Calendar
Schedule
Lectures | Assignments | Readings |
---|---|---|
Week 1: September 23 | ||
Lecture 1.1 (Mon): Introduction ( slides ) | ||
Lecture 1.2 (Wed): Syntax and semantics ( notes ) | Assignment 1 out |
Types and Programming Languages (TAPL) Ch. 3 |
Week 2: September 30 | ||
Lecture 2.1 (Mon): Lambda calculus ( notes ) | TAPL Ch. 5 |
|
Lecture 2.2 (Wed): Type systems ( notes ) | Assignment 1 due, Assignment 2 out |
TAPL Ch. 8-9 |
Week 3: October 7 | ||
Lecture 3.1 (Mon): Functional basics ( notes ) |
|
|
Lecture 3.2 (Wed): Algebraic data types ( notes ) | Assignment 2 due, Assignment 3 out |
|
Week 4: October 14 | ||
Lecture 4.1 (Mon): Parametric types ( notes ) | TAPL Ch. 20, 23 |
|
Lecture 4.2 (Wed): Modules [no lecture!] ( notes ) | Assignment 3 due, Assignment 4 out |
TAPL Ch. 24 |
Week 5: October 21 | ||
Lecture 5.1 (Mon): Mutability ( notes ) | ||
Lecture 5.2 (Wed): Control flow: branches ( notes ) | Assignment 4 due, Assignment 5 out |
|
Week 6: October 28 | ||
Lecture 6.1 (Mon): Control flow: functions ( notes ) | ||
Lecture 6.2 (Wed): Memory safety ( notes ) | Assignment 5 due, Assignment 6 out |
|
Week 7: November 4 | ||
Lecture 7.1 (Mon): Traits ( notes ) | ||
Lecture 7.2 (Wed): Smart pointers ( notes ) | Assignment 6 due, Assignment 7 out |
|
Week 8: November 11 | ||
Lecture 8.1 (Mon): Concurrency ( notes ) | ||
Lecture 8.2 (Wed): Typestate ( notes ) | Assignment 7 due, Assignment 8 out |
|
Week 9: November 18 | ||
Lecture 9.1 (Mon): Session types ( notes ) | ||
Lecture 9.2 (Wed): Parallelism and programming languages ( slides , code ) | Assignment 8 due (Friday), final released |
|
November 25 | ||
No class for Thanksgiving! | ||
Week 10: December 2 | ||
Lecture 10.1 (Mon): Guest lecture - Jean Yang, Akita Software and CMU | ||
Lecture 10.2 (Wed): Psychology of programming languages | ||
Week 11: December 9 | ||
Friday, December 13: Final due at 6:30pm |