Programming Languages
UW CSE 341, Fall 2026
UW CSE 341, Fall 2026
This class is about the theory, design, implementation and practice of Programming Languages. You will learn how to analyze new programming languages quickly, how to make use of advanced programming idioms, do functional programming (in OCaml & Racket), how to implement reference interpreters, and gain an appreciation for the power & elegance of ideas from programming languages.
Lecture in CSE2 G01 — MWF 10:30 - 11:20am
Section AA in SAV 155 — Th 11:30 - 12:20pm
Section AB in ARC 160 — Th 12:30 - 1:20pm
Please use the Ed Message board for most questions. Questions can be made private if necessary (e.g. if it is necessary to share code to ask the question)
Course Staff email — cse341-staff [at] cs
Instructor: Gilbert Bernstein — gilbo [at] cs
TAs: Graham Cobden, Seanna Qin, Vivek Sarkar, Ryan Zambrotta
4:30-5:30pm CSE2 121 - Seanna
2-3pm CSE2 4th floor breakout - Vivek
11:45-12:30pm CSE2 235 - Gilbert (Instructor)
1-2pm CSE2 151 - Graham
2-3pm CSE2 152 - Vivek
3:30-4:30pm CSE2 121 - Ryan
4:30-5:30pm CSE1 3rd floor breakout - Seanna
12:00-1:00pm CSE2 131 - Ryan
1-2pm CSE2 151 - Graham
Gradescope (HW hand in and exam results)
Start assignments early
Aim to complete the assignments the day before they are due. If they are more difficult than expected, you will not get yourself in trouble.
The message board is a communal resource. Please ask your question publicly if possible. Please do help answer your classmates' questions! Please share cool things that you learn about and are relevant to the class!
Focus on understanding, not getting points, especially on the homeworks!
Do not skip class or section to work on the homework. Do not do homework (for this class or other classes) during lecture or section! We know. We've tried to do that too. It's always a net negative for learning.
In every course, there is a danger that you will not learn much and thus lose the most important reason to take the course. In 341, this danger is heightened because it is easy to get “distracted by unfamiliar surroundings” and never focus on the concepts you need to learn. These surroundings include new syntax, editors, error messages, etc. Becoming comfortable with them is only one aspect of this course, so you must get past it. When we use a new language or feature, you must spend time on your own “getting comfortable” in the new setting as quickly as possible so you do not start ignoring the course material.
If you approach the course by saying, “I will have fun learning to think in new ways,” then you will do well. If you instead say, “I will try to fit everything I see into the way I already look at programming,” then you will get frustrated. By the end, it will relate back to what you know, but be patient.
CSE 341 in its modern incarnation was developed by Dan Grossman, and has evolved over time to incorporate key ideas and contributions from James Wilcox, Zach Tatlock, Anjali Pal, and Brett Wortzman. (an archive of webpages for all previous and subsequent versions of this course can be found here) Additionally, materials have been incorporated from Alexa VanHattum (CS251 at Wellesley College). We are greatly indebted to and thankful for these contributions.