CSE341: Programming Languages, Spring 2016

Course Info

Course Information

Lecture: Monday, Wednesday, Friday 10:30-11:20 MGH 389
Section AA: Thursday 12:30-1:20 MGH228
Section AB: Thursday 1:30-2:20 MGH238
Section AC: Thursday 2:30-3:20 JHN 026
Section AD: Thursday 11:30-12:20 THO202
Section AE: Thursday 9:30-10:20 LOW206

Office Hours:
Mondays, 4:30-5:30PM, Allen Center 220, Naruto Iwasaki
Tuesdays, 10:30-11:30AM, Allen Center 021, Justin Harjanto
Wednesdays, 9:15-10:15AM, Allen Center 218, Konstantin Weitz
Wednesdays, 3:00-4:00PM, Allen Center 002 (“the lab”), Ben Tebbs
Thursdays, 3:30-4:30PM, Allen Center 218, Justin Adsuara
Fridays, 11:30AM-12:30PM, Allen Center 220, Nicholas Shahan
Fridays, 2:00-3:00PM, Allen Center 574, Dan Grossman

Contact Info

Contact Information

Course Email List (mandatory): You should receive email sent to the course mailing list regularly, roughly at least once a day. Any important announcements will be sent to this list.

Email sent to cse341-staff@cs.washington.edu will reach the instructor and all the TAs. For questions multiple staff members can answer, we encourage you to use this email so that you get a quicker reply and the whole staff is aware of points of confusion.

Course staff:
  All staff: cse341-staff@cs.washington.edu
  Instructor: Dan Grossman, djg@cs.washington.edu (not @u...)
  TA: Justin Adsuara, justbads@cs
  TA: Justin Harjanto, gestone@cs
  TA: Naruto Iwasaki, niwemail@cs
  TA: Nicholas Shahan, nshahan@cs
  TA: Benjamin Tebbs, bentebbs@cs
  TA: Konstantin Weitz, weitzkon@cs

Course Discussion Board (optional but encouraged)

Anonymous Feedback (goes only to the instructor)

Course Materials

Material in the future naturally subject to change in terms of coverage or schedule

  1. Unit 1: ML Functions, Tuples, Lists, and More    Reading Notes    Videos
  2.   L1. Mar 28-30: Course Mechanics, ML Variable Bindings   slides: pptx   pdf   pdf6up   code: sml   file-from-class
  3.   L2 Mar 30 - Apr 1. Functions, Pairs, Lists   slides: pptx   pdf   pdf6up   code: sml
  4.   S1. Mar 31: Emacs, SML Mode, Shadowing, Error Messages
         Konstantin slides: pptx   pdf   pdf6up   code:   errors   errors fixed
         Nick slides: pptx   pdf   pdf6up   code:   errors   errors fixed
  5.   L3 Apr 4. Local Bindings, Options, Benefits of No Mutation   slides: pptx   pdf   pdf6up   code: sml
  6.  
  7. Unit 2: Datatypes, Pattern Matching, Tail Recursion, and More    Reading Notes    Videos
  8.   L4. Apr 6: Records, Datatypes, Case Expressions   slides: pptx   pdf   pdf6up   code: sml
  9.   S2. Apr 7: Type Synonyms, Polymorphism, & More
         Konstantin slides: pptx   pdf   pdf6up   code: sml
         Nick slides: pptx   pdf   pdf6up   code: sml
  10.   L5. Apr 8: More Datatypes and Pattern Matching   slides: pptx   pdf   pdf6up   code: sml
  11.   L6. Apr 11: Nested Pattern-Matching, Exceptions, Tail Recursion   slides: pptx   pdf   pdf6up   code: sml
  12.  
  13. Unit 3: First-Class Functions and Closures    Reading Notes    Videos
  14.   L7. Apr 13-15 First-Class Functions   slides: pptx   pdf   pdf6up   code: sml
  15.   S3. Apr 14: Standard-Library Docs, Unnecessary Function Wrapping, Fold & More
         Konstantin slides: pptx   pdf   pdf6up   code: sml
         Nick slides: pptx   pdf   pdf6up   code: sml
  16.   L8. Apr 15: Lexical Scope and Function Closures   slides: pptx   pdf   pdf6up   code: sml
  17.   L9. Apr 18: Function-Closure Idioms   slides: pptx   pdf   pdf6up   code: sml
  18.  
  19. Unit 4: ML Modules, Type Inference, Equivalence, & More    Reading Notes    Videos
  20.   L10. Apr 20: ML Modules   slides: pptx   pdf   pdf6up   code: sml
  21.   S4. Apr 21: Mutual Recursion, More Currying, More Modules
         Konstantin slides: pptx   pdf   pdf6up   code: sml
         Nick slides: pptx   pdf   pdf6up   code: sml
  22.   L11. Apr 22-25: Type Inference   slides: pptx   pdf   pdf6up   code: sml
  23.   L12. Apr 25: Equivalence   slides: pptx   pdf   pdf6up
  24.  
  25. Course-Motivation Interlude, Apr 27  slides  pdf  pdf6up   Videos
  26.  
  27. Unit 5: Racket, Delaying Evaluation, Memoization, Macros    Reading Notes    Videos
  28.   L13. Apr 27 - May 2: Racket Introduction   slides: pptx   pdf   pdf6up   code: rkt
  29.   L14. May 4: Thunks, Laziness, Streams, Memoization   slides: pptx   pdf   pdf6up   code: rkt
    Some of the material in L14 is covered in S6 instead
  30.   S6. May 5: More streams, Memoization, and More
         Konstantin code: rkt
         Nick code: rkt
  31.   L15. May 6: Macros   slides: pptx   pdf   pdf6up   code: rkt
  32.  
  33. Unit 6: Structs, Implementing Languages, Static vs. Dynamic Typing    Reading Notes    Videos
  34.   L16. May 9: Datatype-Style Programming With Lists or Structs   slides: pptx   pdf   pdf6up   code: rkt   sml
  35.   L17. May 11-13: Implementing Languages Including Closures   slides: pptx   pdf   pdf6up   code: rkt
    Some of the material in L17 was covered in S7 instead
  36.   S7. May 12: Legal ASTs, Macros as Functions, and More
         Konstantin code (no slides): rkt
         Nick slides (code same as L17): pptx   pdf   pdf6up
  37.   L18. May 13-16: Static vs. Dynamic Typing   slides: pptx   pdf   pdf6up   code: rkt   sml
  38.  
  39. Unit 7: Ruby, Object-Oriented Programming, Subclassing    Reading Notes    Videos
  40.   L19. May 16-18: Introduction to Ruby and OOP   slides: pptx   pdf   pdf6up   code: lec19_silly.rb   lec19_example.rb
  41.   S8. May 19: Ruby arrays, hashes, ranges, blocks, and more   annotated code: rb
  42.   L20. May 20-23: Arrays & Such, Blocks & Procs, Inheritance & Overriding   slides: pptx   pdf   pdf6up   code: rb
    Some of the material in L20 will be covered in S8 instead
  43.   L21. May 23: Dynamic Dispatch Precisely, & Manually in Racket   slides: pptx   pdf   pdf6up   code: rb   sml   rkt
  44.  
  45. Unit 8: Program Decomposition, Mixins, Subtyping, and More    Reading Notes    Videos
  46.   L22. May 25: OOP vs. Functional Decomposition; Adding Operators & Variants; Double-Dispatch
       slides: pptx   pdf   pdf6up   code stage A:   sml   rb   java   code stage B:   sml   rb   java   code stage C:   sml   rb   java
  47.   S9. May 26: Double-Dispatch, Mixins, and Visitors
         Konstantin (no slides): rb
         Nick: pptx   pdf   pdf6up   sml dispatch   sml visitor   rb dispatch   rb visitor   rb mixins
  48.   L23. May 27: Multiple Inheritance, Mixins, Interfaces, Abstract Methods   slides: pptx   pdf   pdf6up   code: rb
  49.   L24. June 1: Subtyping   slides: pptx   pdf   pdf6up
  50.   S10. Final Exam Review
  51.   L25. June 3: Subtyping for OOP; Comparing/Combining Generics and Subtyping   slides: pptx   pdf   pdf6up
  52.  
  53. L26. June 3: Course Victory Lap   slides: pptx   pdf   pdf6up
Homeworks

Homework Assignments

Homework 0: on-line survey worth 0 points, "due" Wednesday March 30

Dropbox for homework turn-in

Exams

Midterm: Friday April 29, in class   unsolved   solved
Sample midterms:
   Spring 2013   unsolved   solved
   Winter 2013   unsolved   solved
   Fall 2011   unsolved   solved
   Spring 2011   unsolved   solved
   Spring 2008   unsolved   solved
   Winter 2008   unsolved   solved

Final Exam: Monday June 6, 8:30-10:20AM   unsolved   solved
Sample finals:
   Spring 2013   unsolved   solved
   Winter 2013   unsolved   solved
   Fall 2011   unsolved   solved
   Spring 2011   unsolved   solved
   Spring 2008   unsolved   solved
   Winter 2008   unsolved   solved

Software

Software Installation and Use

Instructions for SML and Emacs, which is everything you need for the first half of the course.
 Videos showing the software installation on Windows

Instructions for Racket and DrRacket

Instructions for Ruby and irb

Links

Links to Other Resources

The course materials on this page (lectures, sections, homeworks, installation instructions, videos) are designed to provide what you need for the course except for some details that you can look up in standard-library documentation or users' guides for particular languages. Links for such information is below. We also provide links to useful books and tutorials that provide alternate explanations. We will not follow any textbooks closely, but you may still find them useful. Suggestions for additional links are welcome.

SML resources:
  www.smlnj.org (links to many things, including the next three resources)
  user's guide
  standard-library documentation
  tutorials, books, and documentation
  Elements of ML Programming, ML'97 Edition, Jeffrey D. Ullman, 1998.
   This is a textbook that takes a different approach but does cover some of the same material.
   Check the errata page to avoid bugs.

Racket resources:
  The Racket Guide
  racket-lang.org, particularly the Documentation tab

Ruby resources:
  Programming Ruby 1.9 & 2.0: The Pragmatic Programmers' Guide, Dave Thomas et al.
   Check the errata page to avoid bugs.
  ruby-doc.org
  Ruby home page


Valid CSS! Valid XHTML 1.1