CSE 341: Programming Languages

Course Information

Meeting MWF 1:30-2:20pm, AND 223
Instructor James Wilcox (jrw12@cs)
    Office Hours: Fridays, 2:30pm-3:30pm, CSE 212
TAs Miranda Edwards (mirae@cs)
    Section AA: Th 12:30-1:20 MGH 287
    Office Hours: Mondays, 3:30pm-4:30pm, CSE 006
Ryan Doenges (rdoenges@uw)
    Section AB: Th 1:30-2:20 EEB 054
    Office Hours: Wednesdays, 5pm-6pm, CSE 218
Nate Yazdani (nyazdani@cs)
    Section AC: Th 2:30-3:20 JHN 026
    Office Hours: Tuesdays, 10:30am-11:30am, CSE 218
Justin Harjanto (gestone@uw)
    Office Hours: Thursdays, 3pm-4pm, CSE 021
Justin Adsuara (justinadsuara@gmail)
    Office Hours: Fridays, 10:30am-11:30am, CSE 021

Goals of the course

The goal of this course is to make you a better computer scientist by teaching you to understand programming deeply. We will:


The course divides roughly into two parts. We will spend the first five weeks or so programming in Standard ML, where we will learn basics of functional programming, type systems, and modularity. Then we'll spend the second half of the course programming in Racket, where we will throw off the shackles of the type discipline and discuss why that may or may not have been a good idea, all the while enjoying the enveloping beauty of the s-expression.

Links to course tools

Assignments and Grading

The primary workload in the course will be homeworks, due approximately every week. You are encouraged to collaborate on homework with classmates, but your solutions should be your own.

Two projects will replace the midterm and final. These are designed to be similar to homeworks in structure, difficulty, and time commitment. However, no collaboration or discussion is allowed on projects.

Finally, please come and introduce yourself and have a few minute chat with me at some point during the quarter.

These components will be weighted as follows.

Homeworks 55%
Individual Project 1 20%
Individual Project 2 20%
Chat with James 5%

Late Policy

Life is hard. In response, we would like to be flexible on deadlines. However, unlimited flexibility is unfair to your classmates and to those of us who grade assignments.

To balance these concerns, you may use up to three late days throughout the quarter. Late days may only be used on homeworks, they do not apply to individual projects.

If something comes up that prevents you from completing an assignment on time (for example, if you are out of late days, or if late days do not apply to the assignment), please get in touch, and we will work something out. It is never too late to ask for help, even if it's the night before (or after) it's due. :)


Unit 1 Notes
Wed. 1/4/17 Lecture 01 Course Introduction; Hello SML; Bindings
Thurs. 1/5/17 Section 01 Hello TAs; Editing SML; Shadowing; Error Messages
Notes on Emacs and SML (see especially Section 8)
Videos showing how to install Emacs on windows
Fri. 1/6/17 Lecture 02 Functions; Tuples
Mon. 1/9/17 Lecture 03 Lists; Let
Unit 2 Notes
Wed. 1/11/17 Lecture 04 Options; Records; Datatypes; Case
Thurs. 1/12/17 Section 02 Type Synonyms, Polymorphism, & More
Fri. 1/13/17 Lecture 05 More Datatypes; Pattern Matching
Mon. 1/16/17 No Lecture MLK Day
Wed. 1/18/17 Lecture 06 Nested Pattern-Matching; Exceptions
Thurs. 1/19/17 Section 03 Tail Recursion
Unit 3 Notes
Fri. 1/20/17 Lecture 07 First-class Functions
Mon. 1/23/17 Lecture 08 Function Closures; Lexical Scope
Wed. 1/25/17 Lecture 09 Closure Idioms
Thurs. 1/26/17 Section 04
Unit 4 Notes
Fri. 1/27/17 Lecture 10 ML Modules
Mon. 1/30/17 Lecture 11 Type Inference
Wed. 2/1/17 Lecture 12 Abstraction in Modules; Program Equivalence
Thurs. 2/2/17 Section 05
Fri. 2/3/17 Lecture 13 Course Motivation Interlude
Mon. 2/6/17 No Lecture Snow day!
Unit 5 Notes
Racket/DrRacket installation instructions
Wed. 2/8/17 Lecture 14 Intro to Racket
Thurs. 2/9/17 Section 06 Mutability, set!, mcons
Fri. 2/10/17 Lecture 15 Thunks, Laziness, Streams, Memoization
Mon. 2/13/17 Lecture 16 Macros
Unit 6 Notes
Wed. 2/15/17 Lecture 17 Datatype-style Programming with Lists vs Structs;
Intro to Interpreters
Thurs. 2/16/17 Section 07 MUPL, quote, eval, apply
Fri. 2/17/17 Lecture 18 Interpreting Languages with Closures
Mon. 2/20/17 No Lecture Presidents' Day
Wed. 2/22/17 Lecture 19 Static vs. Dynamic typing
Unit 7 Notes
Ruby Installation Instructions
Thurs. 2/23/17 Section 08 Ruby basics and duck typing
Fri. 2/24/17 Lecture 20 Hello Ruby!
Mon. 2/27/17 Lecture 21 Arrays, Blocks, Procs, Inheritance, Overriding
Wed. 3/1/17 Lecture 22 Dynamic Dispatch
Thurs. 2/23/17 Section 09 Double Dispatch, Mixins, and the Visitor Pattern
Unit 8 Notes
Fri. 3/3/17 Lecture 23 FP vs. OOP decomposition
Mon. 3/6/17 Lecture 24 Multiple Inheritance, Interfaces, Abstract Methods
Wed. 3/8/17 Lecture 25 Subtyping
Fri. 3/10/17 Lecture 26 Subtyping for OOP; Overview of PL Research; Victory Lap


Homework 0 Out: Wed. 1/4/17
Due: Sun. 1/8/17 11:59pm
Homework 1 Out: Sat. 1/7/17
Due: Sun. 1/15/17 11:59pm
Homework 2 Out: Mon. 1/16/17
Due: Sun. 1/22/17 11:59pm
Homework 3 Out: Mon. 1/23/17
Due: Sun. 1/29/17 11:59pm
Homework 4 Out: Wed. 2/8/17
Due: Tues. 2/14/17 11:59pm
Homework 5 Out: Wed. 2/15/17
Due: Thurs. 2/23/17 11:59pm
Homework 6 Out: Sat. 2/25/17
Due: Fri. 3/3/17 11:59pm
Homework 7 Out: Thu. 3/2/17
Due: Fri. 3/10/17 11:59pm

Individual Projects

Individual Project 1 Out: Tue. 1/31/17
Due: Sun. 2/5/17 11:59pm
Individual Project 2 Out: Fri. 3/10/17
Due: Fri. 3/17/17 11:59pm

Other Resources