CSE341: Programming Languages, Autumn 2018

Course Info

Course Information

Lecture: Monday, Wednesday, Friday 12:30-1:20 EEB 125
Section AA: Thursday 12:30-1:20, MGH 238
Section AB: Thursday 1:30-2:20, MGH 251
Section AC: Thursday 2:30-3:20, MGH 288
Section AD: Thursday 11:30-12:20, JHN 022

Office Hours:
Lanhao: Mondays 3:00-4:00, CSE 2nd Floor Breakout
Xinrong: Tuesdays 2:00-3:00, CSE 220
Daniel: Wednesdays 1:30-2:30, CSE 4th Floor Breakout
Ethan: Thursdays 5:35-6:35, CSE 4th Floor Breakout
Dan: Fridays 10:00-11:00, CSE 574
Tam: Fridays 2:00-3:00, CSE 4th Floor Breakout

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.uw.edu (not @u...)
  TA: Lanhao Wu, lanhaw@cs.uw.edu
  TA: Tam Dang, dangt7@cs.uw.edu
  TA: Ethan Shea, ethshea@cs.uw.edu
  TA: Daniel Snitkovskiy, snitkdan@cs.uw.edu
  TA: Xinrong Zhao, zhaox29@cs.uw.edu

Course Discussion Board (optional but encouraged)

For the discussion board, if you are registered in the course, then you should be a member using your UW Google Apps identity (@uw, not @cs).

Anonymous Feedback

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. Sep 26-28: Course Mechanics, ML Variable Bindings   slides: pptx   pdf   pdf6up   code: sml
  3.   S1. Sep 27: Emacs, SML Mode, Shadowing, Error Messages
        code:   errors   errors fixed    slides:   Tam   Xinrong   Daniel/Lanhao
  4.   L2. Sep 28 - Oct 1: Functions, Pairs, Lists   slides: pptx   pdf   pdf6up   code: sml
  5.   L3. Oct 1-3. 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. Oct 3-5: Records, Datatypes, Case Expressions   slides: pptx   pdf   pdf6up   code: sml
  9.   S2. Oct 4: Type Synonyms, Polymorphism, & More
         code:   Xinrong   Daniel/Lanhao   Ethan   slides:   Daniel/Lanhao   Xinrong/Ethan   Tam
  10.   L5. Oct 5-8: More Datatypes and Pattern Matching   slides: pptx   pdf   pdf6up   code: sml
  11.   L6. Oct 8-10: 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. Oct 10-12: First-Class Functions   slides: pptx   pdf   pdf6up   code: sml
  15.   S3. Oct 11: Standard-Library Docs, Unnecessary Function Wrapping, Higher-Order Functions
         code:   Ethan   Tam   Xinrong   slides:   Daniel/Lanhao   Xinrong   worksheet:   Worksheet   Key
  16.   L8. Oct 12-15: Lexical Scope and Function Closures   slides: pptx   pdf   pdf6up   code: sml
  17.   L9. Oct 15-17: Function-Closure Idioms   slides: pptx   pdf   pdf6up   code: sml
  18.  
  19. Unit 4: ML Modules, Type Inference, Equivalence, & More    Reading Notes    Videos
  20.   L10. Oct 17-19: ML Modules   slides: pptx   pdf   pdf6up   code: sml
  21.   S4. Oct 18: Mutual Recursion, More Currying, More Modules
         code:   Daniel/Lanhao   Ethan   Tam   Xinrong   slides:   Daniel/Lanhao   Ethan   Tam   Xinrong
  22.   L11. Oct 19-22: Type Inference   slides: pptx   pdf   pdf6up   code: sml
  23.   L12. Oct 22-24: Equivalence   slides: pptx   pdf   pdf6up
  24.  
  25. Course-Motivation Interlude, Oct 24  pptx  pdf  pdf6up   Videos
  26.  
  27.   S5. Oct 26: Midterm Review   sample problems   Xinrong slides
  28.  
  29. Unit 5: Racket, Delaying Evaluation, Memoization, Macros    Reading Notes    Videos
  30.   L13. Oct 26-31: Racket Introduction   slides: pptx   pdf   pdf6up   code: rkt
  31.   L14. Oct 31, Nov 2: Thunks, Laziness, Streams, Memoization   slides: pptx   pdf   pdf6up   code: rkt
    Some of the material in L13 and L14 will likely be covered in S6 instead
  32.   S6. Nov 1: Mutation, Delayed Evaluation      code:   Ethan   Daniel/Lanhao   Xinrong
  33.   L15. Nov 5: Macros   slides: pptx   pdf   pdf6up   code: rkt
  34.  
  35. Unit 6: Structs, Implementing Languages, Static vs. Dynamic Typing    Reading Notes    Videos
  36.   L16. Nov 5-7: Datatype-Style Programming With Lists or Structs   slides: pptx   pdf   pdf6up   code: rkt   sml
  37.   L17. Nov 7-9: Implementing Languages Including Closures   slides: pptx   pdf   pdf6up   code: rkt
    Some of the material in L17 will be covered in S7 instead
  38.   S7. Legal ASTs, Macros as Functions, and More    slides:   Daniel/Lanhao   Tam   Ethan   Xinrong    code:   Ethan   Xinrong
  39.   L18. Nov 9, 16, 19: Static vs. Dynamic Typing   slides: pptx   pdf   pdf6up   code: rkt   sml
  40.  
  41. Unit 7: Ruby, Object-Oriented Programming, Subclassing    Reading Notes    Videos
  42.   L19. Nov 14, 16: Introduction to Ruby and OOP   slides: pptx   pdf   pdf6up   code: lec19_silly.rb   lec19_example.rb
  43.   S8. Nov 15: Ruby arrays, hashes, ranges, blocks, and more    code:   Xinrong   Ethan
  44.   L20. Nov 16: Arrays & Such, Blocks & Procs, Inheritance & Overriding   slides: pptx   pdf   pdf6up   code: rb
    Some of the material in L20 will be covered in S8 instead
  45.   L21. Nov 26: Dynamic Dispatch Precisely, & Manually in Racket   slides: pptx   pdf   pdf6up   code: rb   sml   rkt
  46.  
  47. Unit 8: Program Decomposition, Mixins, Subtyping, and More    Reading Notes    Videos
  48.   L22. Nov 28: 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
  49.   S9. Nov 29: Double-Dispatch, Mixins, and Visitors -
       slides:   Daniel/Lanhao   Tam   Xinrong   code:   sec9_dispatch.sml   sec9_dispatch.rb   sec9_dispatch_daniellanhao.rb   sec9_mixins.rb   sec9_mixins_tam.rb   sec9_visitor.rb   sec9_visitor.sml   sec9_visitor_zhaox29.sml
  50.   L23. Nov 30, Dec 3: Multiple Inheritance, Mixins, Interfaces, Abstract Methods   slides: pptx   pdf   pdf6up   code: rb
  51.   L24. Dec 3-5: Subtyping   slides: pptx   pdf   pdf6up
  52.   L25. Dec 5: Subtyping for OOP; Comparing/Combining Generics and Subtyping   slides: pptx   pdf   pdf6up
  53.  
  54. Dec 5-7, Bonus code on functional programming in OOP/Java:   java   sml
  55.  
  56. S10. Dec 6: Final Exam Review    slides:   Ethan
  57.  
  58. L26. Dec 7: Course Victory Lap   slides: pptx   pdf   pdf6up
Homeworks

Homework Assignments

Turn-In Instructions: The Turn-In Form links take you to a Google Form where you enter your name and upload your files. These forms are restricted to UW accounts and you will need to log in to UW Google Apps identity (@uw, not @cs). These are different from any personal Google account you have and different from your UW CSE Google account. If you have not yet activated UW G Suite, you will need to do so first. If you are not signed into to your UW account you may see a page like this. To fix, go to google.com and click on the circle in the upper right to add/switch account.

Exams

Midterm: Monday October 29, in class   unsolved   solved

Sample midterms:
   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: Thursday December 13, 8:30-10:20AM   unsolved   solved

Sample finals:
   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, which is everything you need for the first half of the course.

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 Docs button

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