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 29 Motivation and Logistics (slides); Hoare logic (slides) (video)
October 1 Forward & Backward Reasoning; Reasoning about if statements (slides) (video)
PP 38
October 4 Reasoning About Loops: invariants and examples (slides) (video)
October 6 Writing Loops: concepts and an important example (slides) (video)
October 8 More Writing Loops: interview question and wrap-up (slides) (worksheet) (solution) (video)
October 11 Specifications: overview, javadoc, comparison, and correctness (slides) (video)
PP 23
October 13 Data Abstraction (ADTs): overview and Java examples (slides) (video)
October 15 Abstraction Functions (AFs): overview and an example (slides) (video)
Code Example
October 18 Representation Invariants (RIs): overview and defensive programming (slides) (video)
EJ 49, 50, 17, 52
October 20 Testing: concepts and heuristics (slides)
PP 41
October 22 More Testing: examples, coverage, and tips (slides)
October 25 Module Design & Style: concepts, Java advice, and readability (slides)
October 27 Identity, Equality, & Hashing: overview and Java details (slides)
EJ 10, 11
October 29 More Identity, Equality, & Hashing: review, mutability, and hashing (slides, demo)
November 1 Exceptions & Assertions: concepts, assertions, mechanics, design, and alternatives (slides)
PP 25
November 3 Subtypes: concepts and (non-)examples (slides)
EJ 40, 18, 19
November 5 More Subtypes: Java details, equals redux, and alternatives (slides)
November 8 Debugging: concepts and tips (slides)
November 10 Generics: overview, methods, and subtyping (slides)
More Generics: bounds, wildcards, arrays, type erasure, and advice (slides)

EJ 28, 30
November 12 "Section 7": HW7, Dijkstra's algorithm, and MVC (slides)
Worksheet (Solution)
November 15 Callbacks, Events, & Event-Driven Programs: callbacks & events and event-driven programs (slides)
Code Examples
November 17 User Interfaces & Javascript: user interfaces, Javascript, and JS classes (slides)
Code Examples
November 19 Modern Web UIs: original, ES6, and TypeScript (slides)
Code Examples
November 22 Javascript & React: overview and state (slides)
Code Examples
November 29 Basic Servers & Clients: overview and http (slides)
Code Examples
December 1 HTTP Servers & Web Clients: Spark and Web Requests (slides)
Code Examples
December 3 Design Patterns: overview, factories, and builders (slides)
December 6 More Design Patterns: sharing, structural, and behavioral (slides)
December 8 System Integration and Software Processes (slides)
December 10 Course Victory Lap (slides)