CSE 590 · Advanced Programming Languages · Winter 2026 · 4 credits
Programming languages and proof assistants are rich mathematical structures and powerful user interfaces. This course covers the design and use of advanced programming languages and proof assistants. We will build up systematically from mathematical first principles while considering human factors in language design, language prototyping, and techniques for reasoning about program behavior throughout the course.
The goal of the course is:
This course assumes substantial prior programming experience and experience with rigorous mathematical definitions and proofs. No prior courses in programming languages or compilers are required, but the course proceeds quickly and students familiar with the topics at an undergraduate level are likely to be at an advantage.
Office hours will be held regularly by the instructors and GSIs, with times and locations announced on Canvas on the course webpage.
If an office hours session needs to be rescheduled, an announcement will be made on Piazza. Please check Piazza regularly to be sure that the office hours you plan to attend is being held as scheduled.
The office hours queue is linked on the course webpage. All office hours will use the queue.
Some office hours will be hybrid or fully virtual, in which case instructions will be provided for remote participants on the queue. You are encouraged, but are not required, to turn your videocamera on. For help with mathematical questions you are working on on-paper, you may be asked to take a photo of your work and send it to the person helping you, or hold it up to the camera. For help with coding questions, you may be asked to share your screen or a specific window. You can share your screen at any time without asking for permission.