CSE 341: Programming Languages

Course Overview

This course covers the design and implementation of programming languages, primarily through the lens of functional programming. A programming language can be viewed as a collection of features. Students will learn to program with functional features that may be new to them (expression-oriented programming, lack of mutation, variant data types, first-class functions). Students will also learn to implement these features in interpreters.

This quarter we are trying something a little bit new in 341 by placing more emphasis on interpreters than in previous offerings of the course. Since this is the first quarter we are trying this approach, expect things to be a bit rough around the edges. We appreciate your patience as we develop this material on the fly. The high-level topics covered this quarter are almost identical to previous quarters—it really is just a difference in emphasis. So students should feel free to take either version, but not both versions of the course.

Structure of the course

Homework is generally due weekly on Friday night. We will alternate weeks of studying how to use new features and how to implement those features.

The calendar page provides a detailed topic list for the course, including homeworks. In addition, we are using Gitlab, Ed, and Gradescope for various parts of the course.

Lectures will be recorded and made available to all students. Not all sections will be recorded, but we will make some information about section available for those who cannot attend.

Course Resources

Course Staff

You can email the entire staff at cse341-staff@cs.washington.edu, but we usually prefer you make a private post on Ed if possible.

Staff Contact

The best way to contact the staff is to make a post on Ed. If your question is likely to be useful to other students, please consider making it public. (You can make the post "anonymous" to hide your identity from your classmates, but note that course staff can still see your identity on anonymous posts. See anonymous feedback at the very bottom of this page for submitting feedback without revealing your identity to course staff.) If your message is not relevant to other students, make it private. We prefer you send messages via Ed if at all possible, because it allows any staff member to assist you. If you need to contact an individual staff member directly, you can also use email.

Assignments and Grades

There are 9 programming homeworks, generally due on Fridays at 11:59pm. See the schedule for a list. There are no other kinds of assignments: no quizzes, no midterm, and no final exam.

We have created a Gitlab repository for each student containing starter code and a description of the assignment. Each student should clone their repository, do their work there, and commit and push it back to Gitlab, and then submit on Gradescope.

The class will be graded on an additive points system. The homeworks are worth 2200 points in total. Approximately 4 of the homeworks (HWs 2, 4, 6, and 8) consist of relatively self-contained programming problems. The other 6 homeworks (HWs 1, 3, 5, 7, and 9) are a quarter-long project to implement the core of a realistic programming language.

The course is not curved. Your grade on a 4.0 scale is computed by the following formula. \[ \min\left( \left.\left\lfloor\frac{\mathrm{points}}{50}\right\rfloor \middle/ 10 \right.,\ 4.0 \right) \] In other words, your grade will be computed by the following table:

Points Grade on 4.0 scale
≥2000 4.0
≥1950 3.9
≥1900 3.8
≥1850 3.7
≥1800 3.6
≥1750 3.5
≥1700 3.4
≥1650 3.3
≥1600 3.2
≥1550 3.1
≥1500 3.0
etc. ...

This grading scheme may be somewhat unfamiliar to you. We will discuss it on the first day of lecture. Be sure you understand it, and feel free to ask any questions about it.

An important consequence the additive points-based grading scheme is that there is a sense in which every assignment is optional. You are most welcome to select a grade to target and strategically decide to simply not turn in assignments whose points you do not need.

If you are taking the class S/NS, note that per university policy, undergraduates receive S credit for any grade 2.0 or higher, while graduate students (including BS/MS students) receive S credit for any grade 2.7 or higher. Thus, an undergraduate would need to earn at least 1000 points to receive S credit, while a graduate student would need to earn at least 1350 points to receive S credit.

Late Policy

Every homework has a 48-hour grace period, during which work is accepted without penalty. No credit after the grace period expires.

Note that, unlike some other course policies you might be familiar with, in this class there is no cap on how much total grace time you can use over the quarter. You can use all 48 grace hours on every single homework and still get full credit.

If you have an extenuating circumstance that causes you not to be able to complete the work on time, please contact the staff. Often, we are able to work something out that is agreeable to everyone involved.

Academic Honesty

Please read CSE's Academic Misconduct Policy.

You are encouraged to discuss all aspects of the course with and ask for help from the instructor, the TAs, and other students. However, do not cross this line: Do not share code or written text. Do not look at homework solutions that might be on the Internet. Do not use someone else's code or text in your solutions or responses. It is ok to share ideas, explain your code to someone to see if they know why it doesn't work, or to help someone else debug if they've run into a wall.

Anonymous Feedback

Anonymous feedback can be sent to the instructor or TAs via feedback.cs.washington.edu.