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 supplemental 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).
|1||T||8/28||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||8/30||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.
Supplemental. Sebesta Chapter 5 Names, Bindings, and Scopes.
|2||T||9/4||Recursion. Data Structures and Pattern Matching. [code, extra code examples, Java search tree classes]||
Advised. OSV Chapter 15 Case Classes and Pattern Matching.
|R||9/6||Recursion. Data Structures and Pattern Matching. [whiteboard, marked up Lab 1 handout]||
Advised. Notes 1.3 (ok to skip 1.3.1 for now).
|F||9/7||Lab 1||Lab 1 due 9/8|
No class: watch the video.
Advised. Notes 1.5. FW Chapter 1 Inductive Sets of Data.
Syntax: Grammars; Scoping; Binding.
Guest lecturer: Dana Hughes.
Advised. Notes 1.4.
Supplemental. Sebesta Sections 3.1-3.3.
|4||T||9/18||Syntax: Grammars; Scoping; Binding. [whiteboard]||
Advised. FW Chapter 2 Data Abstraction.
|R||9/20||Expression Evaluation. [whiteboard]||
Advised. FW Chapter 3 Expressions up to and including 3.2.
|F||9/21||Lab 2||Lab 2 due 9/22|
|5||T||9/25||Operational Semantics. [whiteboard]||
Advised. FW Chapter 3.3-3.4 PROC and LETREC.
|R||9/27||Small-Step Semantics; Evaluation Order; and Short-Circuit Evaluation. [whiteboard]||
Advised. Notes 2.1.
Supplemental. Sebesta Chapter 7.2 Arithmetic Expressions (particularly 7.2.2) and 7.6 Short-Circuit Evaluation.
|6||T||10/2||Small-Step Semantics; Evaluation Order; and Short-Circuit Evaluation. Dynamic Scoping. [whiteboard]||
Supplemental. FW Chapter 3.5 Scoping and Binding of Variables. Sebesta Chapter 5.5-5.8 (inclusive).
|R||10/4||Small-Step Semantics; Evaluation Order; and Short-Circuit Evaluation. Dynamic Scoping. [whiteboard, marked-up notes]||
Advised. Notes 2.2.
|F||10/5||Lab 3||Lab 3 due 10/6|
|7||T||10/9||Midterm Review. [whiteboard]||Quiz 3|
|F||10/12||No class. Replaced by review session on Wednesday 10/10 5:00pm-7:00pm in ECCR 155.|
|8||T||10/16||Collections and Callbacks (Higher-Order Functions) [code, code from class]||
Advised. OSV Chapter 16.1-16.9 Lists.
Recommended. OSV Chapter 17.2 Sets and Maps.
Supplemental. Twitter Scala School. Collections.
|R||10/18||Type Checking; Records. [whiteboard]||
Advised. Notes 2.3.
Supplemental. Sebesta. Chapter 6.7 Record Types.
|9||T||10/23||Type Checking; Records. [whiteboard, code]|
|R||10/25||Type Equality. [whiteboard]||
Advised. Amer Diwan. Type Checking and Type Equality.
|F||10/26||Lab 4||Lab 4 due 10/27|
|10||T||10/30||Variables and Pointers. [whiteboard]||
Advised. FW Chapter 4 State (4.1-4.4)
Supplemental. Sebesta. Chapter 6.9 Pointers.
|R||11/1||Procedural Abstraction. [whiteboard]||
Advised. FW Chapter 4 State (4.5).
Recommended. Sebesta. Chapter 9.5 Parameter Passing.
Supplemental. Sebesta. Chapter 9.1-9.6 (9.5 is already recommended).
|11||T||11/6||Variables and Pointers. Procedural Abstraction. [whiteboard]|
|R||11/8||Variables and Pointers. Procedural Abstraction. [whiteboard, marked up lab handout]|
|F||11/9||Lab 5||Lab 5 due 11/10|
|12||T||11/13||Lab 5 Wrap-Up and Lab 6 Introduction. Continuations and Regular Expressions. [whiteboard]||
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.
|R||11/15||Continuations and Regular Expressions [code]||
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||11/16||Lab 6: Parsing|
|13||T||11/20||No class. Fall break.|
|R||11/22||No class. Thanksgiving.|
|F||11/23||No class. Thanksgiving.|
|14||T||11/27||Parsing, Regular Expressions, and Continuations. [whiteboard, marked up lab handout]|
|R||11/29||Parsing, Regular Expressions, and Continuations. [whiteboard]|
|F||11/30||Lab 6||Lab 6 due 12/1|
|15||T||12/4||Subtyping and Object-Oriented Languages: Subtyping versus Subclassing [whiteboard]||Quiz 6|
|R||12/6||Subtyping and Object-Oriented Languages: Subtyping versus Subclassing [whiteboard]|
|16||T||12/11||Presentations||Video due 12/12|
|R||12/13||Final Review [whiteboard]|
|F||12/14||No class. Replaced by review session on Sunday 12/16 4:00pm-6:00pm in ECCR 151.|
|M||12/17||Final Exam, 7:30pm-10:00pm|