Lecture Topics

Readings: EJ numbers refer to Items, not chapters, in Effective Java 3rd edition
PP numbers refer to Topics, not chapters, in Pragmatic Programmer 2nd (20th Anniversary) edition

March 30 Motivation and Administrivia (slides)
April 1 Reasoning about straight line code: Hoare logic, reasoning, if statements (slides: recorded and live)
PP 38; more lecture notes (optional)
April 3 Reasoning about loops: loop invariants and examples (slides: recorded and live)
April 6 Writing Loops: concepts and an important example (slides: recorded and live)
more lecture notes (optional)
April 8 (Optional) Writing Loops: an interview question (slides)
April 10 Specifications: overview, how to, and comparisons (slides: recorded and live)
PP 23
April 13 Data Abstraction (ADTs): overview and Java examples (slides: recorded and live)
April 15 Abstraction Functions: overview and in-depth example (slides: recorded and live)
Code Examples
April 17 Representation Invariants: overview and defensive programming tips (slides: recorded and live)
EJ 49, 50, 17, 52
April 20 Testing: overview and heuristics (slides: recorded and live)
PP 41
April 22 More Testing: code coverage and tools & tips (slides)
April 24 Module Design & Style: concepts, Java specifics, and readability (slides)
April 27 Identity, Equality, & Hashing I: overview and Java details (slides)
EJ 10, 11
April 29 Identity, Equality, & Hashing II: equals with mutability and hashCode (slides: recorded and live)
May 1 Exceptions & Assertions: concepts, Java assertions, Java exceptions, exception design / style, special values, and finally blocks (slides: recorded and live)
PP 25
May 4 Debugging: concepts and tips (slides)
May 6 Subtypes I: overview (slides, first 9 slides only)
EJ 40, 18, 19
May 8 Subtypes II: examples, Java details, and advice (slides)
EJ 40, 18, 19
May 11 Generics I: generic types, generic methods, subtyping, and bounds (slides)
EJ 28, 30
May 13 Generics II: wildcards, arrays, type erasure, and final thoughts (slides: recorded and live)
May 15 Callbacks, Events, & Event-Driven Programs: callbacks and events, event-driven programs, and a detailed example (slides)
Code Examples
May 18 User Interfaces & JavasScript: UIs, JS, and classes (slides)
Code Examples
May 20 Modern Web UIs: Classic, ES6, TypeScript, React pt1, React pt2 (slides: recorded and live)
Code Examples
May 22 JS / React Q & A (slides: live)
May 27 HTTP Servers & Web Clients: overview, HTTP protocol, Spark Java, web requests (slides)
Code Examples
May 29 HTTP Servers & Web Clients Q & A
June 1 Design Patterns I: overview, factories, and builders (slides)
EJ 1, 2, 4
June 3 Design Patterns II: sharing, structural, behavioral (slides)
June 5 Real-World Patterns