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 1/14 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.
R 1/16 Scala Crash Course: Basic Values and Types. Evaluation. [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.
F 1/17 Lab 1
2 T 1/21 Recursion. Data Structures and Pattern Matching.
Guest Lecturer: David Johnson
Advised. OSV Chapter 15 Case Classes and Pattern Matching.
R 1/23 Recursion. Data Structures and Pattern Matching.
Guest Lecturer: David Johnson
Advised. Notes 1.3 (ok to skip 1.3.1 for now).
F 1/24 Lab 1 Lab 1 due 1/25
3 T 1/28 Inductive Definitions.
Guest Lecturer: Sam Blackshear
Advised. Notes 2.3 (ok to skip 2.3.3 for now). FW Chapter 1 Inductive Sets of Data.
Quiz 1
R 1/30 Syntax: Grammars; Scoping; Binding. [whiteboard, lab notes]
Advised. Notes 2.1.
F 1/31 Lab 2
4 T 2/4 Syntax: Grammars; Scoping; Binding. [whiteboard, lab notes]
Advised. FW Chapter 2 Data Abstraction.
R 2/6 Expression Evaluation. [whiteboard, lab notes] Recommended. FW 3.1-3.2.
F 2/7 Lab 2 Lab 2 due 2/8
5 T 2/11 Operational Semantics. [whiteboard, lab notes]
Advised. Notes 3.1.
Quiz 2
R 2/13 Small-Step Semantics; Evaluation Order; and Short-Circuit Evaluation. [whiteboard, lab notes]
Advised. Notes 3.2.
F 2/14 Lab 3
6 T 2/18 Small-Step Semantics; Evaluation Order; and Short-Circuit Evaluation. Dynamic Scoping. [whiteboard, marked-up course notes]
Recommended. FW Chapter 3.3-3.4 PROC and LETREC.
R 2/20 Small-Step Semantics; Evaluation Order; and Short-Circuit Evaluation. Dynamic Scoping. [whiteboard, marked-up lab handout]
Supplemental. FW Chapter 3.5 Scoping and Binding of Variables.
F 2/21 Lab 3 Lab 3 due 2/22
7 T 2/25 Midterm Review Quiz 3
R 2/27 Midterm Exam
F 2/28 Canceled
8 T 3/4 Collections and Callbacks (Higher-Order Functions) [code]
Advised. OSV Chapter 16.1-16.9 Lists.
Recommended. OSV Chapter 17.2 Sets and Maps.
Supplemental. Twitter Scala School. Collections.
R 3/6 Type Checking; Records. [code]
Advised. Notes 4.1.
F 3/7 Lab 4
9 T 3/11 Type Checking; Records. [code, , marked-up lab handout]
R 3/13 Type Checking; Records. [code, marked-up lab handout]
F 3/14 Lab 4 Lab 4 due 3/15
10 T 3/18 Variables and Pointers.
Advised. OSV Chapter 23.1 and 23.3 For Expressions.
Recommended. FW Chapter 4 State (4.1-4.4)
Quiz 4
R 3/20 Procedural Abstraction. [code, marked-up lab handout, whiteboard]
Recommended. OSV Chapter 23.2 For Expressions.
Recommended. FW Chapter 4 State (4.5).
Supplemental. OSV Chapter 23.4-23.5 For Expressions.
F 3/21 Lab 5
- T 3/25 No class. Spring break.
R 3/27 No class. Spring break.
F 3/28 No class. Spring break.
11 T 4/1 Variables and Pointers. Procedural Abstraction. [marked-up lab handout, whiteboard]
R 4/3 Variables and Pointers. Procedural Abstraction. [marked-up lab handout, whiteboard]
F 4/4 Lab 5 Lab 5 due 4/5
12 T 4/8 Continuations and Regular Expressions.
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.
Quiz 5
R 4/10 Continuations and Regular Expressions. [marked-up lab handout, whiteboard]
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.
F 4/11 Lab 6
13 T 4/15 Parsing, Regular Expressions, and Continuations. [code]
R 4/17 Parsing, Regular Expressions, and Continuations. [whiteboard]
F 4/18 Lab 6 Lab 6 due 4/19
14 T 4/22 Object-Oriented: Dynamic Dispatch, Subtyping vs. Subclassing Quiz 6
R 4/24 Object-Oriented: Dynamic Dispatch, Subtyping vs. Subclassing
Guest Lecturer: Devin Coughlin
Recommended. FW Chapter 9 Objects and Classes
Supplemental. ECMA-262 Spec 4.2.1
F 4/25 Object-Oriented: Dynamic Dispatch, Subtyping vs. Subclassing
15 T 4/29 Special Topic: Big Data and Functional Programming [slides]
Guest Lecturer: Jim Baker
R 5/1 Final Review
F 5/2 Final Review
W 5/7 Final Exam, 4:30pm-7:00pm