The following schedule lists the topics we plan to cover and approximately the number of meetings we plan to spend on each topic. The schedule is tentative. Most likely, some things will change during the semester, and the schedule will be revised as necessary. This class is yours, so please make suggestions.

The exam dates are fixed, so you may plan accordingly.

The Reading column lists the assigned reading for the meeting. You should do the reading before attending class and view it as an introduction to spark discussion in class.

The Assignment column lists the due date for each assignment.

Readings. Notes refers to the course notes. OSV refers to Odersky, Spoon, and Venners. Programming in Scala, 2nd edition. FW refers to Friedman and Wand, Essentials of Programming Languages, 3rd edition. The readings will be classified into the following order of recommendation: Advised (highest importance), Recommended (important but read after previous category), and Supplemental (additional material for a different perspective).

Date Topic Reading Assignment
1 T 8/25 Welcome. Getting your money's worth. [slides]
Advised. Notes 1.1. FW Foreword and Preface.
Recommended. OSV Chapter 1 A Scalable Language.
Supplemental. Bootstrapping: Torben Mogensen. Basics of Compiler Design, Chapter 13.
Controversial editorial (optional). Joel Spolsky. The Perils of JavaSchools.
Why Twitter uses Scala (optional).
Poster (optional). Peter Van Roy. The principal programming paradigms.
Poster (optional). O'Reilly. History of Programming Languages Poster.
W 8/26 Course Tools. Team Formation.
R 8/27 Scala Crash Course: Basic Values and Types. Evaluation. [whiteboard, code]
Advised. Notes 1.2. OSV Chapter 2 First Steps in Scala, Chapter 5 Basic Types and Operations, Section 6.10 Identifiers in Scala, Section 7.7 Variable Scope, Section 17.5 Tuples.
2 T 9/1 Recursion. Data Structures and Pattern Matching. [whiteboard, code]
Advised. OSV Chapter 15 Case Classes and Pattern Matching.
W 9/2 Lab 1
R 9/3 Recursion. Data Structures and Pattern Matching. [whiteboard, code, marked-up handout]
Advised. Notes 1.3 (ok to skip 1.3.1 for now).
Lab 1 due 9/5
3 T 9/8 Inductive Definitions.
Advised. Notes 2.3 (ok to skip 2.3.3 for now). FW Chapter 1 Inductive Sets of Data.
Exercise 1
W 9/9 Lab 2
R 9/10 Syntax: Grammars; Scoping; Binding. [marked-up handout]
Advised. Notes 2.1.
4 T 9/15 Syntax: Grammars; Scoping; Binding. [whiteboard, marked-up handout]
Advised. FW Chapter 2 Data Abstraction.
W 9/16 Lab 2
R 9/17 Expression Evaluation. [whiteboard, marked-up handout]
Recommended. FW 3.1-3.2.
Lab 2 due 9/19
5 T 9/22 Operational Semantics. [whiteboard, marked-up handout]
Advised. Notes 3.1.
Exercise 2
W 9/23 Lab 3
R 9/24 Small-Step Semantics; Evaluation Order; and Short-Circuit Evaluation. [whiteboard, marked-up handout]
Advised. Notes 3.2.
6 T 9/29 Small-Step Semantics; Evaluation Order; and Short-Circuit Evaluation. Dynamic Scoping. [whiteboard]
Recommended. FW Chapter 3.3-3.4 PROC and LETREC.
W 9/30 Lab 3
R 10/1 Small-Step Semantics; Evaluation Order; and Short-Circuit Evaluation. Dynamic Scoping.
Supplemental. FW Chapter 3.5 Scoping and Binding of Variables.
Lab 3 due 10/3
7 T 10/6 Midterm Review Exercise 3
W 10/7 Midterm Review
R 10/8 Midterm Exam
8 T 10/13 Collections and Callbacks (Higher-Order Functions)
Advised. OSV Chapter 16.1-16.9 Lists.
Recommended. OSV Chapter 17.2 Sets and Maps.
Supplemental. Twitter Scala School. Collections.
W 10/14 Lab 4
R 10/15 Collections and Callbacks (Higher-Order Functions) [whiteboard, marked-up handout] Advised. code worksheet
9 T 10/20 Type Checking; Records.
Advised. Notes 4.1.
W 10/21 Lab 4
R 10/22 Type Checking; Records. Lab 4 due 10/24
10 T 10/27 Variables and Pointers.
Recommended. FW Chapter 4 State (4.1-4.4)
Supplemental. OSV Chapter 23.1 and 23.3 For Expressions.
Exercise 4
W 10/28 Lab 5
R 10/29 Procedural Abstraction.
Advised. code worksheet
Recommended. FW Chapter 4 State (4.5).
Supplemental. OSV Chapter 23.2, 23.4-23.5 For Expressions.
11 T 11/3 Variables and Pointers. Procedural Abstraction.
W 11/4 Lab 5
R 11/5 Variables and Pointers. Procedural Abstraction.
12 T 11/10 Variables and Pointers. Procedural Abstraction.
W 11/11 Lab 5
R 11/12 Variables and Pointers. Procedural Abstraction. Lab 5 due 11/14
13 T 11/17 Parsing, Regular Expressions, and Continuations.
Supplemental. Michael Sipser. Introduction to the Theory of Computation. Chapter 1.3. For the lab, you really only need to basic "operational" definition of regular expressions, but this reading is a nice supplement to connect regular expressions with the theory of regular languages and finite automata in your other courses. Similarly for Chapter 2.1-2.2 for context-free grammars, context-free languages, and pushdown automata.
Exercise 5
W 11/18 Lab 6
R 11/19 Parsing, Regular Expressions, and Continuations.
Advised. "Twelve Days of 3155"
Advised. FW Chapter 6.1 Writing Programs in Continuation-Passing Style
Supplemental. FW Chapter 5 Continuation-Passing Interpreters. This supplemental reading provides some additional context for 6.1.
- T 11/24 No class. Thanksgiving break.
W 11/25 No class. Thanksgiving break.
R 11/26 No class. Thanksgiving break.
14 T 12/1 Parsing, Regular Expressions, and Continuations.
W 12/2 Lab 6
R 12/3 Parsing, Regular Expressions, and Continuations. Lab 6 due 12/5
15 T 12/8 Project Presentations Exercise 6
W 12/9 Project Presentations
R 12/10 Final Review
Final Exam