CSE341: Programming Languages, Autumn 2019

Announcements

Announcements

Course Info

Course Information

Lecture: Monday, Wednesday, Friday 8:30am-9:20am CSE2 G10
Section AA: Thursday 12:30pm-1:20pm, ECE 003 (Lanhao)
Section AB: Thursday 1:30pm-2:20pm, KNE 110 (Brendan)
Section AC: Thursday 2:30pm-3:20pm, MGH 238 (Josie/Max)

Office Hours:
 Josie: Mondays, 9:30am-10:30am, CSE2 151
 Eric: Tuesdays, 10:00am-11:00am, CSE 332
 Lanhao: Wednesdays, 1:00pm-2:00pm CSE2 152
 Brendan: Thursdays, 3:30pm-4:30pm, CSE2 151
 Max: Fridays, 2:00pm-3:00pm (10/25 1:30pm-2:00pm), CSE2 152

A small note on course content: while most content will bear the name of the instructor Eric Mullen, the bulk of the credit for developing the content of this course should go to Dan Grossman, whose past offerings of this course have been adapted into this offering with very minimal changes.

Contact

Contact Information

Course staff:
  All staff: cse341-staff@cs.washington.edu
  Instructor: Eric Mullen, emullen@cs.uw.edu (not @uw...)
  TA: Brendan Murphy, bsmurphy@uw.edu
  TA: Josie Lee, jlee98@uw.edu
  TA: Lanhao Wu, lanhaw@uw.edu
  TA: Max Packer, mnpacker@uw.edu

Course Discussion Board
You are encouraged to post questions on the message board rather than emailing course staff. This will allow us to see all questions in one place, and also allow students to benefit from (and help answer!) each other's questions.

Anonymous Feedback

Materials

Course Materials

This list should accurately reflect the past, but may not accurately predict the future. Please allow at least 24 hours after class for any changes or new materials to be posted.

  1. Unit 1: ML Functions, Tuples, Lists, and More    Reading Notes    Videos
  2.   L1. Course Mechanics, ML Variable Bindings   slides:  keynote   pdf   code: sml
  3.   S1. SML intro, environment setup   slides:  pdf
  4.   L2. Functions, Pairs, Lists   slides: pptx   pdf   pdf4up   code: sml   code in class: sml
  5.   L3. Local Bindings, Options, Benefits of No Mutation   slides: keynote   pdf   pdf6up   code: sml
  6.  
  7. Unit 2: Datatypes, Pattern Matching, Tail Recursion, and More    Reading Notes    Videos
  8.   L4. Records, Datatypes, Case Expressions   slides: keynote   pdf   pdf6up   code: sml
  9.   S2. Type Synonyms, Polymorphism   slides:  pdf   code:  sml   handout:  pdf
  10.   L5. More Datatypes and Pattern Matching   slides: keynote   pdf   pdf6up   code: sml
  11.   L6. Nested Pattern-Matching, Exceptions, Tail Recursion   slides: keynote   pdf   pdf6up   code: sml
  12.  
  13. Unit 3: First-Class Functions and Closures    Reading Notes    Videos
  14.   L7. First-Class Functions   slides: keynote   pdf   pdf6up   code: sml
  15.   S3. Polymorphic Datatypes, Higher-Order Functions   slides:  pdf   reference:  pdf   worksheet:  pdf   solutions:  pdf
  16.   L8. Lexical Scope and Function Closures   slides: keynote   pdf   pdf6up   code: sml
  17.   L9. Function-Closure Idioms   slides: keynote   pdf   pdf6up   code: sml
  18.  
  19. Unit 4: ML Modules, Type Inference, Equivalence, & More    Reading Notes    Videos
  20.   L10. ML Modules   slides: key   pdf   pdf6up   code: sml
  21.   S4. Mutual Recursion, Modules, Currying   slides:  pdf   code:  zip   worksheet:  pdf
  22.   L11. Type Inference   slides: keynote   pdf   pdf6up   code: sml
  23.   L12. Equivalence   slides: keynote   pdf   pdf6up
  24.  
  25. Interlude. Course-Motivation  keynote  pdf  pdf6up   Videos
  26.   S5. Midterm Review   slides:  sectionAA  sample problems
  27.  
  28. Unit 5: Racket, Delaying Evaluation, Memoization, Macros    Reading Notes    Videos
  29.   L13. Racket Introduction   slides: keynote   pdf   pdf6up   code: rkt
  30.   S6. Racket Intro   slides:  sectionAA
  31.   L14. Thunks, Laziness, Streams, Memoization   slides: keynote   pdf   pdf6up   code: rkt
  32.   L15. Macros   slides: keynote   pdf   pdf6up   code: rkt
  33.  
  34. Unit 6: Structs, Implementing Languages, Static vs. Dynamic Typing    Reading Notes    Videos
  35.   L16. Datatype-Style Programming With Lists or Structs   slides: keynote   pdf   pdf6up   code: rkt   sml
  36.   S7. Language Implementation, Quote/Quasiquote/Eval   slides:  pdf   code:  rkt
  37.   L17. Implementing Languages Including Closures   slides: keynote   pdf   pdf6up   code: rkt
  38.   L18. Static vs. Dynamic Typing   slides: keynote   pdf   pdf6up   code: rkt   sml
  39.  
  40. Unit 7: Ruby, Object-Oriented Programming, Subclassing    Reading Notes    Videos
  41.   L19. Introduction to Ruby and OOP   slides: keynote   pdf   pdf6up   code: lec19_silly.rb   lec19_example.rb
  42.   S8. Ruby Intro   slides:  pdf   code:  rb
  43.   L20. Arrays & Such, Blocks & Procs, Inheritance & Overriding   slides: keynote   pdf   pdf6up   code: rb
  44.   L21. Dynamic Dispatch Precisely, and Manually in Racket   slides: keynote   pdf   pdf6up   code: rb   sml   rkt
  45.  
  46. Unit 8: Program Decomposition, Mixins, Subtyping, and More    Reading Notes    Videos
  47.   L22. OOP vs. Functional Decomposition; Adding Operators & Variants; Double-Dispatch
       slides: keynote   pdf   pdf6up   code stage A:   sml   rb   java   code stage B:   sml   rb   java   code stage C:   sml   rb   java
  48.   S9. Double-Dispatch, Mixins, Visitor Pattern   slides:  pdf1  pdf2   code:  zip
  49.   L23. Multiple Inheritance, Mixins, Interfaces, Abstract Methods   slides: keynote   pdf   pdf6up   code: rb
  50.   L24. Subtyping   slides: keynote   pdf   pdf6up
  51.   L25. Subtyping for OOP; Comparing/Combining Generics and Subtyping   slides: keynote   pdf   pdf6up
  52.   S10. Final Review   practice final:  unsolved  solved
  53.  
  54. L26. Course Victory Lap   slides: keynote   pdf   pdf6up
Homework

Homework Assignments

Turn in assignments (exception HW0) via Gradescope

Exams

Midterm: Monday, Oct 28, in class   unsolved   solved

Sample midterms:
   Summer 2019   unsolved   solved
   Spring 2019   unsolved   solved
   Winter 2019   unsolved   solved
   Fall 2018   unsolved   solved
   Fall 2017   unsolved   solved
   Spring 2017   unsolved   solved
   Spring 2016   unsolved   solved
   Spring 2013   unsolved   solved
   Winter 2013   unsolved   solved
   Fall 2011   unsolved   solved
   Spring 2008   unsolved   solved
   Winter 2008   unsolved   solved


Final Exam: Tuesday, Dec 10, 8:30am - 10:20am, CSE2 G10   unsolved   solved

Sample finals:
   Summer 2019 (one hour, shorter)   unsolved   solved
   Spring 2019   unsolved   solved
   Winter 2019   unsolved   solved
   Fall 2018   unsolved   solved
   Fall 2017   unsolved   solved
   Spring 2017   unsolved   solved
   Spring 2016   unsolved   solved
   Spring 2013   unsolved   solved
   Winter 2013   unsolved   solved
   Fall 2011   unsolved   solved
   Spring 2008   unsolved   solved
   Winter 2008   unsolved   solved

Software

Software Installation and Use

Instructions for SML and Emacs
Everything you need for the first half of the course.

Instructions for Racket and DrRacket

Instructions for Ruby and irb