This schedule is a work in progress and will be updated throughout the quarter; check in before each lecture for updates. In general, I'll try to keep the schedule at least a week or so ahead, so that you can anticipate where we're headed.
All assigned readings are from the Scott text. It is a good idea to skim the assigned reading before the lecture for the main ideas, attend lecture, and then to go through the assigned reading again to fill in the details that you missed, both in your initial skim of the reading and in the lecture.
Several lectures have little or no reading corresponding to them. In some cases, this is because a block of reading corresponds to more than one lecture. In other cases, the material covered in that lecture is not discussed in the textbook.
Date |
Lecture Topics |
Readings |
Project Due |
Week 1 |
Tu 4/2 |
- Course introduction and policies
- Why learn about more than one programming language?
- Historical influences
- The influences of computer architecture on language design
|
|
|
Th 4/4 |
- Why programming language design is hard
- Syntax and semantics
- Describing syntax using BNF/grammars
- Parse trees and derivations
- Ambiguity
|
|
|
Week 2 |
Tu 4/9 |
- Expressions and statements
- Operator precedence and associativity
- Expressing precedence and associativity in a grammar
|
|
|
Th 4/11 |
- Type systems
- The tradeoff between dynamic and static typing
- Genericity in a dynamically-typed language
- Genericity in a statically-typed language
- Generic classes in Java
|
|
|
Week 3 |
M 4/15 |
|
|
Project #1 due 11:59pm |
Tu 4/16 |
- Generic classes in Java (continued)
- Iteration and the "foreach" loop in Java
- Wildcard type parameters in Java
|
|
|
Th 4/18 |
- Bounded type parameters in Java
- Tying multiple generic types together in Java
- Generic methods in Java
|
|
|
Week 4 |
Tu 4/23 |
- Tying up a few loose ends in Java generics
- Overview of programming language implementation issues
- Compilers, interpreters, and hybrid systems
- Binding
- Runtime organization
|
|
|
Th 4/25 |
- Variables and their attributes
- Names
- Addresses and allocation
- Scope and lifetime
- Static scoping and dynamic scoping
- Types, revisited (briefly)
- The case for functional programming
|
|
|
Week 5 |
M 4/29 |
|
|
Project #2 due 11:59pm |
Tu 4/30 |
- Introduction to functional programming in Haskell
|
|
|
Th 5/2 |
- Introduction to functional programming in Haskell (continued)
|
|
|
Week 6 |
Tu 5/7 |
- MIDTERM: regular lecture time and location
|
|
|
Th 5/9 |
- Introduction to functional programming in Haskell (continued)
- Abstract data types (ADTs)
- Classes as an implementation of an abstract data type
|
|
|
Week 7 |
|
Non-lecture reading |
|
|
M 5/13 |
|
|
Project #3 due 11:59pm |
Tu 5/14 |
- ADTs in imperative languages without object-oriented features
- Language support for object-oriented programming (briefly)
- Implementation of classes, inheritance, and polymorphism
|
|
|
Th 5/16 |
- Implemenation of classes, inheritance, and polymorphism (continued)
- Object layout
- How inheritance affects object layout
- Virtual method tables (VMTs) to implement polymorphism
|
|
|
Week 8 |
Tu 5/21 |
- Implementation of subprograms
- Parameter passing modes
|
|
|
Th 5/23 |
- Implementation of subprograms (continued)
- The case for concurrency
- Introduction to Java threads
|
|
|
F 5/24 |
|
|
Project #4 due 11:59pm |
Week 9 |
M 5/27 |
- University Holiday: Memorial Day — NO LABS TODAY
|
|
|
Tu 5/28 |
- Introduction to Java threads (continued)
- The perils of shared memory
- Creating and starting threads
- "Primitive" mechanisms, Part 1: sleep, interrupt, join
|
|
|
Th 5/30 |
- "Primitive" mechanisms, Part 2: synchronized, wait, notify
- The "monitor" inside each Java object
- Deadlock and race conditions (briefly)
- Preventing deadlock (briefly)
|
|
|
Week 10 |
Tu 6/4 |
- Concurrent data structures
- Building a blocking queue using synchronized, wait, and notify
- Implementation of garbage collection (briefly)
- Mark and sweep
- Generational garbage collectors
|
|
|
Th 6/6 |
- How interesting Haskell features show up in mainstream languages
- Higher-order functions in Java and C#
- Lazy evaluation in Java and C#
|
|
|
F 6/7 |
|
|
Project #5 due 11:59pm |
Finals Week |
Th 6/13 |
- FINAL EXAM: 4:00-6:00pm, DBH 1100
|
|
|