CSE logo University of Washington Computer Science & Engineering
 CSE 341 Programming Languages - Spring 2011
  CSE Home   About Us    Search    Contact Info 


Course Information

Academic-Integrity Policy
Challenge-Problem Policy
Lectures: MWF 12:30-1:20, EEB 045
Sections: Th, 12:30-1:20 or 1:30-2:20, MGH 234.


Class discussion board
Class email list archives

Course Staff & Office Hours

Instructor: Hal Perkins; perkins(at)cs; CSE 548; office hours Mon. 3:40-4:30 + appointments + any other time when not busy.
TA: Emily Fortuna, fortuna(at)cs; office hours: Wed. 1:30-2:30, CSE 218.
TA: Cody Schroeder, codys(at)cs; office hours: Thur. 2:30-4:00 & Fri. 1:30-3:00, CSE 218.


Dropbox for homework

Homework 1, due Thursday 7 April, 11:00 PM
Homework 2, due Thursday 14 April, 11:00 PM   provided code
Homework 3, due Sunday 24 April, 11:00 PM   provided code
Homework 4, due Thursday 5 May, 11:00 PM   provided code
     Sample images:   George   Martha   Guy   Curry
Homework 5, due Tuesday 17 May, 11:00 PM   provided code
Homework 6, due Thursday 26 May, 11:00 PM
Homework 7, due Saturday 4 June, 11:00 PM. No late assignments accepted after this deadline, even if you have late days remaining.
     starter code  executable demo (warning: large 12MB jar file; run with java -jar Adventure.jar)


This quarter's final: exam  sample solution
Sample finals:   sp08 unsolved   sp08 solved   Wi08 unsolved   Wi08 solved
    (Note: The second half of sp04 and au04 covered substantially different material than this quarter, so those exams are not linked here.)
This quarter's midterm: exam  sample solution
Sample midterms:   Sp08 unsolved   Sp08 solved   Wi08 unsolved   Wi08 solved   Au04 unsolved   Au04 solved   Sp04 unsolved   Sp04 solved

Class Materials

Slides will usually be posted no later than the night before class. Sample code and other materials may not be posted until after the corresponding lecture.

The "sp08summary" links are to Dan Grossman's essays describing the corresponding lectures during that quarter. While we can't guarantee to cover exactly the same things at the same pace or in the same order, these notes should be a very useful resource.

1. Mar 28: Course mechanics, ML variable bindings   slides   code   sp08summary
2. Mar 30: Functions, pairs, lists   slides   code   sp08summary
3. Apr 1: Lack of mutation, let bindings, options   slides   code   sp08summary
4. Apr 4: Each-of vs. one-of types, records, datatypes, case expressions   slides   code   sp08summary
5. Apr 6: Pattern matching, one-argument functions; tail recursion, accumulators   slides   code   sp08summary
6. Apr 8: Deep pattern-matching, course motivation   slides   code   sp08summary
7. Apr 11: Functions taking/returning functions   slides   code   sp08summary
8. Apr 13: Function closures   slides   code  additional code from lecture   sp08summary
9. Apr 15: Function-closure idioms   slides   code   sp08summary
10. Apr 18: Higher-Order Functions Wrapup; Type inference; Namespace management   slides   code   sp08summary
11. Apr 20: Modules; Abstract Types   slides   code   sp08summary
12. Apr 22: Parametric polymorphism; Equivalence   slides   sp08summary
13. Apr 25: Introduction to Scheme   slides   code   summary
X. Apr 26: Midterm review, EE 045, 4:30 pm
X. Apr 27: Midterm
14. Apr 29: Thunks, Streams, Memoization   slides   code   summary
15. May 2: Macros   slides   code   summary
16. May 4: Define-struct; implementing higher-order functions   slides   code   summary
17. May 6: Static vs. dynamic typing   slides   summary
18. May 9: DrScheme modules; abstraction with dynamic types; function equvalences   slides   code   summary
19. May 11: Introduction to Ruby   slides   code   summary  lecture demo transcript
20. May 13: Duck Typing; Blocks, Procs, and Iterators; Inheritance and Overriding   slides   code   summary
21. May 16: Late-binding: OO's essence, as a Scheme pattern   slides   code   summary
22. May 18: Multiple Inheritance, Interfaces, Mixins   slides   code   summary
23. May 20: Static typing for objects; OO subtyping   slides   summary
24. May 23: Named types; Parametric polymorphism vs. subtyping; bounded polymorphism   slides   code   summary
25. May 25: OO vs. functional extensibility   slides   ML   Java   summary
26. May 27: Garbage collection   slides
X. May 30: University Holiday
27. Jun 1: A bit of history  slides  hopl proceedings  50 in 50
28. Jun 3: Wrap-up   slides
X. Jun 8 (Wed.): Review session, EE 037, 4:30 pm.
X. Jun 9 (Thur.): Final exam, 8:30 am.

Section Materials

1. Mar 31: Lists, pairs, etc.
2. Apr 7: Type synonyms, type variables, equality types, exceptions   code
3. Apr 14: First class functions, more tail recursion, fold   code
4. Apr 21: Modules, mutual recursion, partial function application   code
5. Apr 28: Scheme, forms of let, cond, more...   code
6. May 5: eval/apply, define-struct, MUPL, practice problems, macros on ASTs   code
7. May 12: Homework 5, MUPL, etc.   code
8. May 19: Ruby arrays, hashes, blocks, iterators, etc.   code
9. May 26: Adventure game (hw7), more Ruby
10. June 2: Course evals, hw7, StatePattern slides

Textbooks and Online Resources

"Required": Jeffrey D. Ullman. Elements of ML Programming, ML'97 Edition. 1998.
Check the errata page to avoid bugs.
Approximately: Chapters 2, 3.1-3.4, 5.1-5.5 (skip 5.2.5, 5.3.4, 5.4.4), 6.1-6.2, 7.1, 8.2, 8.5.5 overlap with the course material.

"Optional": R. Kent Dybvig, The Scheme Programming Language, 4th ed. 2009.
For those who want a more tutorial introduction to Scheme.

"Optional": Dave Thomas. Programming with Ruby. 2005.
Check the errata page to avoid bugs.
Overlap with the course material is very roughly chapters 1-9 (or chapters 1-8 of the first edition), but not ranges, regular expressions, and several other small topics. We will stick with Ruby 1.8, which is installed in the CSE labs and is the main version distributed with Linux and OS X. Either the Ruby 1.8 or 1.9 versions of the book will work fine, however.

SML resources (none of which should be necessary):
  www.smlnj.org (links to many things, including the next three resources)
  user's guide
  standard-library documentation
  tutorials, books, and documentation

Scheme resources:
  R5RS (the standard)
  How to Design Programs
  Structure and Interpretation of Computer Programs
  Programming Languages: Application and Interpretation

Ruby resources:
  List compiled by Stuart Reges for Spring 2010's CSE341


The CSE undergraduate labs have all the software you need for the course. If you would like to install software on your own computers, these links may help you. They contain more knowledge than the course staff has, so our ability to help further is limited.

New!! Installing SML/NJ and Emacs on your own machine (and getting Emacs sml mode to work on your lab account)
emacs for Windows FAQ

(use version 110.72)
Racket (the successor to DrScheme)


Homework 0, "due" March 31, 11:00PM (worth 0 points)
Getting started with Linux and emacs (very old - ignore obsolete things; we'll try to update when time is available)
Guidelines for using ML in emacs

CSE logo Computer Science & Engineering
University of Washington
Box 352350
Seattle, WA  98195-2350
(206) 543-1695 voice, (206) 543-2969 FAX
[comments to perkins]