1 Logistics
1.1 Textbook
The required textbook is Benjamin Pierce’s "Types and Programming Languages", MIT Press, 2002. My offerings of CS 442 make much use of this book; please do not try to avoid acquiring it.
I will go beyond what the textbook covers at certain points, and that material will be synthesized from various sources. If you are having difficulty with course material, please contact course personnel. Do not try to find something online or in the library that might help.
1.2 Getting Help
We will be using Piazza for online public questions and discussion. If you have not received an invitation by the first lecture, or you have joined the course after that, please contact the instructor. Course personnel will have regular office hours, listed on the home page. You may also email course personnel. Please do so from your UW email address.
1.3 Lectures
I will post fairly detailed slides before the lectures in which they are used, and corrected versions if necessary afterwards. I suggest taking selective notes by hand in lecture, more as a stimulus for active learning than for reference later. Consider avoiding open laptops and tablets in lecture. They are distracting to you and others, and studies show they reduce performance even when used only to take notes (which is rarely their only use in practice). Please set your cellphones on stun.
Do not make the mistake of thinking that the posted materials are a substitute for attending lecture. I will not in any way enforce regular lecture attendance, but I highly recommend it. I will do my best to make it worth your while.
1.4 Homework
Details will be posted on the Assignments page. Assignment questions will not be due weekly or on a regular schedule; rather, each assignment will be released when relevant material has been covered in lecture. I will try to give some advance warning, but it really depends on the timing of lectures. Submission details are on the Marmoset page.
Different questions may have different weights. No solutions will be posted, but course personnel will be happy to help you complete questions for study purposes.
1.5 Exams
One midterm exam and one final exam, both closed-book, no aids. The midterm is Monday, March 5, 7:00-9:00pm, room TBA. This should not conflict with other 3rd and 4th year CS courses. If it conflicts with anything else academic on your schedule, please let me know as soon as possible, and definitely before January 31. Final exam details will be posted here, but you can learn about it from the Registrar’s web page at the same time as we do.
There will be no practice exams or exam questions available. It is a bad idea in general to try to study from previous exams. Your best approach is to complete all assignment questions, even if the due date has passed, and work on your own variations of these questions as well. Note that the assignments make heavy use of computers but the exams do not; they are entirely handwritten. My exam questions are not tweaks on assignment questions. I try to find new situations that you should be able to handle if you have done the assignments and learned the concepts that need to be applied.
1.6 Grading
Assignments will be worth 40%; midterm 20%; final exam 40%.
1.7 Software
Racket: Racket 6.11 (formerly PLT Scheme);
OCaml: OCaml version 4.06;
Haskell: Haskell Platform (including GHC, the Glasgow Haskell Compiler, and associated tools and libraries), version 8.2.1;
Idris: Idris 1.1.0 or later (if used).
Racket comes with a good IDE for development (DrRacket). OCaml and Haskell do not, though they have command-line interpreters. Good language modes for OCaml and Haskell are available for Vim and Emacs. I will use Emacs to demo these languages in lecture. Idris works with Vim, Emacs, and Atom.