CSE 341: Programming Languages

Course Overview

This course is an introduction to the field of programming languages (PL), primarily through the lens of functional programming. One way to view a programming language is as a collection of features. We will explore each feature as programmers who use it and then as programming language designers who implement it. The first half of the course is essentially an introduction to functional programming in OCaml through a PL-person lens. The second half of the course is about how to make your own programming languages using interpreters.

Structure of the course

Lectures will be recorded and made available to all students.

Sections will generally not be recorded, but we will make handouts available digitally. Occasionally, a section handout will be required, but you can make arrangements to turn it in without attending section.

There are no quizzes or exams.

Homework is generally due weekly on Wednesdays.

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, that would be an appropriate use of email.

Assignments

There will be 9 (EDIT: 7) weekly homeworks that consist of programming, testing, and explanation.

There is also a final project, due during finals week, where you will design and implement a language feature of your choice.

Grading

The class will be graded on an additive points system. Each weekly homework is worth 100 points. The final project is worth an additional 100 points. There are a total of 1000 points available.

Because 2 weekly homeworks were canceled, there are 200 free points in addition to 700 points available on weekly homeworks.

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}}{22.5}\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
≥900.0 4.0
≥877.5 3.9
≥855.0 3.8
≥832.5 3.7
≥810.0 3.6
≥787.5 3.5
≥765.0 3.4
≥742.5 3.3
≥720.0 3.2
≥697.5 3.1
≥675.0 3.0
... ...
≥607.5 2.7 (grad sat)
... ...
≥450.0 2.0 (undergrad sat)
... ...

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.

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 at a high level 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.

This policy applies to use of artificial intelligence (AI) as well. You can ask a chat-based AI agent, such as ChatGPT, questions about the material at a high level, or ask it to explain why a certain code behavior might occur, but you cannot ask it to produce a solution for you. For in-IDE agents, such as Copilot, you may not use them at all in this course.

On every assignment you submit, you must include a references and collaboration statement, that lists all resources (except for course materials and staff) you used while completing the assignment, including any websites and other students you talked to. Even if you didn't use any resources, you must include the statement "References and collaboration list: None."

Anonymous feedback

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