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 |
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.
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% |
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
Videos |
|
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
Videos |
|
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
Videos |
|
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
Videos |
|
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
Videos 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
Videos |
|
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
Videos 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
Videos |
|
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 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 |