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

DateDescription
September 30 Introduction (slides) and Administrivia (slides)
October 2 Reasoning About Straight-Line Code: Hoare logic, forward & backward reasoning, and if statements (slides)
PP 38; more lecture notes (optional)
October 5 Reasoning About Loops: invariants and examples (slides)
October 7 Writing Loops: concepts and an important example (slides)
more lecture notes (optional)
October 9 More Writing Loops: interview question and wrap-up (slides)
October 12 Specifications: overview, javadoc, comparison, and optionally correctness (slides)
PP 23
October 14 Data Abstractions / ADTs: overview and Java examples (slides)
October 16 Abstraction Functions: overview and an example (slides)
Code Example
October 19 Representation Invariants: overview and defensive programming tips (slides)
EJ 49, 50, 17, 52
October 21 Testing: concepts and heuristics (slides)
PP 41
October 23 More Testing: more examples, coverage, and tools & tips (slides)
October 26 Module Design & Style: concepts, Java advice, and readability (slides)
October 28 Identity, Quality & Hashing: overview and Java details (slides)
EJ 10, 11
October 30 More Identity, Quality & Hashing: review, mutability, and hashCode (slides)
November 2 Exceptions & Assertions: concepts, assertions, mechanics, design, and alternatives (slides)
PP 25
November 4 Subtypes: concepts and (non-)examples (slides)
EJ 40, 18, 19
November 6 More Subtypes: Java details, equals redux, and alternatives (slides)
November 9 Generics: overview, methods, and subtyping (slides)
EJ 28, 30
November 13 More Generics: bounds, wildcards, arrays, type erasure, and advice (slides)
November 16 Callbacks, Events & Event-Driven Programs: callbacks & events and event-driven programs (slides)
Code Examples
November 18 User Interfaces & Javascript: user interfaces, Javascript, and JS classes (slides)
Code Examples
November 20 Modern Web UIs: original, ES6, and TypeScript (slides)
Code Examples
November 23 JS & React: overview and state management (slides)
Code Examples
November 25 Extra Section Topic: HW8 (slides)
Code Examples
November 30 Basic Serviers & Clients (slides)
Code Examples
December 2 HTTP Serviers & Web Clients: HTTP, Spark, and Web Requests (slides)
Code Examples
December 4 Debugging: concepts and tips (slides)
December 7 Design Patterns: overview, factories, and builders (slides)
EJ 1, 2, 4
December 9 More Design Patterns: sharing, structural, and behavioral (slides)
December 11 Real World (Anti-)Patterns (slides)