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
March 29 Motivation (slides) and Administrivia (slides)
March 31 Reasoning About Straight-Line Code: Hoare logic, forward & backward reasoning, and if statements (slides)
PP 38
April 2 Reasoning About Loops: invariants and examples (slides)
April 5 Writing Loops: concepts and an important example (slides)
April 7 More Writing Loops: interview question and wrap-up (slides)
April 9 Specifications: overview, javadoc, comparison, and correctness (slides)
PP 23
April 12 Data Abstraction (ADTs): overview and Java examples (slides)
April 14 Abstraction Functions (AFs): overview and an example (slides)
Code Example
April 16 Representation Invariants (RIs): overview and defensive programming (slides)
EJ 49, 50, 17, 52
April 19 Testing: concepts and heuristics (slides)
PP 41
April 21 More Testing: examples, coverage, and tips (slides)
April 23 Module Design & Style: concepts, Java advice, and readability (slides)
April 26 Identity, Equality, & Hashing: overview and Java details (slides)
EJ 10, 11
April 28 More Identity, Equality, & Hashing: review, mutability, and hashing (slides)
April 30 Exceptions & Assertions: concepts, assertions, mechanics, design, and alternatives (slides)
PP 25
May 3 Subtypes: concepts and (non-)examples (slides)
EJ 40, 18, 19
May 5 More Subtypes: Java details, equals redux, and alternatives (slides)
May 7 Debugging: concepts and tips (slides)
May 10 Generics: overview, methods, and subtyping (slides)
EJ 28, 30
May 12 More Generics: bounds, wildcards, arrays, type erasure, and advice (slides)
Code Example
May 14 Callbacks, Events, & Event-Driven Programs: callbacks & events and event-driven programs (slides)
Code Examples
May 17 User Interfaces & Javascript: user interfaces, Javascript, and JS classes (slides)
Code Examples
May 19 Modern Web UIs: original, ES6, and TypeScript (slides)
Code Examples
May 21 Javascript & React: overview and state (slides)
Code Examples
May 24 Basic Servers & Clients: overview and http (slides)
Code Examples
May 26 HTTP Servers & Web Clients: Spark and Web Requests (slides)
Code Examples
May 28 Design Patterns: overview, factories, and builders (slides)
June 2 More Design Patterns: sharing, structural, and behavioral (slides)
June 4 Real World Anti-Patterns (slides)