CompSci 141 / CSE 141 / Informatics 101 Spring 2013
Schedule


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
  • Ch. 1
Th 4/4
  • Why programming language design is hard
  • Syntax and semantics
  • Describing syntax using BNF/grammars
  • Parse trees and derivations
  • Ambiguity
  • Ch. 2.1
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
  • Ch. 3.5
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
  • Ch. 7.1
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
  • Ch. 6
  • Ch. 7
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
  • Ch. 9.1 - 9.4
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
  • Ch. 8.1 - 8.4
Th 5/23
  • Implementation of subprograms (continued)
  • The case for concurrency
  • Introduction to Java threads
  • Ch. 12
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