Schedule

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

September
MondayTuesdayWednesdayThursdayFriday
28 29 30
10:30-11:20 Lecture
Introduction (slides) and Administrivia (slides)
01
Section
Java tools (slides)
15:00-16:00 OH (Alexey)
17:00-18:00 OH (Yiyang)
02
10:30-11:20 Lecture
Reasoning About Straight-Line Code: Hoare logic, forward & backward reasoning, and if statements (slides)
PP 38; more lecture notes (optional)
14:00-15:00 OH (David Ross)
15:30-16:30 OH (Manchen)
23:00 HW0 due

October
MondayTuesdayWednesdayThursdayFriday
05
10:30-11:20 Lecture
Reasoning About Loops: invariants and examples (slides)
14:00-15:00 OH (Hoaran)
15:00-16:00 OH (Meishan)
16:00-17:00 OH (David Xu)
06
11:30-12:30 OH (Kaushal)
16:30-17:30 OH (Andrew)
07
9:00-10:00 OH (Rachel)
10:30-11:20 Lecture
Writing Loops: concepts and an important example (slides)
more lecture notes (optional)
18:00-19:00 OH (Ardi)
08
Section
Reasoning about code (slides)
worksheet and solution
15:00-16:00 OH (Alexey)
17:00-18:00 OH (Yiyang)
23:00 HW1 due
09
10:30-11:20 Lecture
More Writing Loops: interview question and wrap-up (slides)
14:00-15:00 OH (David Ross)
15:30-16:30 OH (Manchen)
23:00 HW3 due
12
10:30-11:20 Lecture
Specifications: overview, javadoc, comparison, and optionally correctness (slides)
PP 23
14:00-15:00 OH (Hoaran)
15:00-16:00 OH (Meishan)
16:00-17:00 OH (David Xu)
13
11:30-12:30 OH (Kaushal)
16:30-17:30 OH (Andrew)
14
9:00-10:00 OH (Rachel)
10:30-11:20 Lecture
Data Abstractions / ADTs: overview and Java examples (slides)
18:00-19:00 OH (Ardi)
15
Section
HW4, AFs & JUnit (slides)
worksheet
15:00-16:00 OH (Alexey)
17:00-18:00 OH (Yiyang)
23:00 HW2 due
16
10:30-11:20 Lecture
Abstraction Functions: overview and an example (slides)
Code Example
14:00-15:00 OH (David Ross)
15:30-16:30 OH (Manchen)
19
10:30-11:20 Lecture
Representation Invariants: overview and defensive programming tips (slides)
EJ 49, 50, 17, 52
14:00-15:00 OH (Hoaran)
15:00-16:00 OH (Meishan)
16:00-17:00 OH (David Xu)
18:00-18:00 Quiz 1 begins
20
11:30-12:30 OH (Kaushal)
16:30-17:30 OH (Andrew)
21
9:00-10:00 OH (Rachel)
10:30-11:20 Lecture
Testing: concepts and heuristics (slides)
PP 41
18:00-19:00 OH (Ardi)
22
Section
HW5 pt1: graphs, testing & rep exposure (slides)
worksheet and solution
15:00-16:00 OH (Alexey)
17:00-18:00 OH (Yiyang)
23:00 HW4 due
23
10:30-11:20 Lecture
More Testing: more examples, coverage, and tools & tips (slides)
14:00-15:00 OH (David Ross)
15:30-16:30 OH (Manchen)
26
10:30-11:20 Lecture
Module Design & Style: concepts, Java advice, and readability (slides)
14:00-15:00 OH (Hoaran)
15:00-16:00 OH (Meishan)
16:00-17:00 OH (David Xu)
18:00-18:00 Quiz 2 begins
27
11:30-12:30 OH (Kaushal)
16:30-17:30 OH (Andrew)
28
9:00-10:00 OH (Rachel)
10:30-11:20 Lecture
Identity, Quality & Hashing: overview and Java details (slides)
EJ 10, 11
18:00-19:00 OH (Ardi)
29
Section
HW5 pt2, equals & hashCode (slides)
worksheets: rep exposure (solution) and equals & hashCode (solution)
15:00-16:00 OH (Alexey)
17:00-18:00 OH (Yiyang)
23:00 HW5 pt1 due
30
10:30-11:20 Lecture
More Identity, Quality & Hashing: review, mutability, and hashCode (slides)
14:00-15:00 OH (David Ross)
15:30-16:30 OH (Manchen)

November
MondayTuesdayWednesdayThursdayFriday
02
10:30-11:20 Lecture
Exceptions & Assertions: concepts, assertions, mechanics, design, and alternatives (slides)
PP 25
12:00-12:00 Quiz 3 begins
14:00-15:00 OH (Hoaran)
15:00-16:00 OH (Meishan)
16:00-17:00 OH (David Xu)
03
11:30-12:30 OH (Kaushal)
16:30-17:30 OH (Andrew)
04
9:00-10:00 OH (Rachel)
10:30-11:20 Lecture
Subtypes: concepts and (non-)examples (slides)
EJ 40, 18, 19
18:00-19:00 OH (Ardi)
05
Section
HW6: parsing data files (slides)
worksheet (solution) and demo code
15:00-16:00 OH (Alexey)
17:00-18:00 OH (Yiyang)
23:00 HW5 pt2 due
06
10:30-11:20 Lecture
More Subtypes: Java details, equals redux, and alternatives (slides)
14:00-15:00 OH (David Ross)
15:30-16:30 OH (Manchen)
09
10:30-11:20 Lecture
Generics: overview, methods, and subtyping (slides)
EJ 28, 30
14:00-15:00 OH (Hoaran)
15:00-16:00 OH (Meishan)
16:00-17:00 OH (David Xu)
18:00-18:00 Quiz 4 begins
10
11:30-12:30 OH (Kaushal)
16:30-17:30 OH (Andrew)
11
Veteran's Day
12
Section
HW7: Dijkstra's algorithm (slides)
worksheet (solution)
15:00-16:00 OH (Alexey)
17:00-18:00 OH (Yiyang)
13
10:30-11:20 Lecture
More Generics: bounds, wildcards, arrays, type erasure, and advice (slides)
14:00-15:00 OH (David Ross)
15:30-16:30 OH (Manchen)
16
10:30-11:20 Lecture
Callbacks, Events & Event-Driven Programs: callbacks & events and event-driven programs (slides)
Code Examples
14:00-15:00 OH (Hoaran)
15:00-16:00 OH (Meishan)
16:00-17:00 OH (David Xu)
23:00 HW6 due
17
11:30-12:30 OH (Kaushal)
16:30-17:30 OH (Andrew)
18
9:00-10:00 OH (Rachel)
10:30-11:20 Lecture
User Interfaces & Javascript: user interfaces, Javascript, and JS classes (slides)
Code Examples
18:00-18:00 Quiz 5 begins
18:00-19:00 OH (Ardi)
19
Section
Review (slides)
15:00-16:00 OH (Alexey)
17:00-18:00 OH (Yiyang)
20
10:30-11:20 Lecture
Modern Web UIs: original, ES6, and TypeScript (slides)
Code Examples
14:00-15:00 OH (David Ross)
15:30-16:30 OH (Manchen)
23
10:30-11:20 Lecture
JS & React: overview and state management (slides)
Code Examples
14:00-15:00 OH (Hoaran)
15:00-16:00 OH (Meishan)
16:00-17:00 OH (David Xu)
24
11:30-12:30 OH (Kaushal)
16:30-17:30 OH (Andrew)
23:00 HW7 due
25
9:00-10:00 OH (Rachel)
26
Thanksgiving
27
Fri. after Thanksgiving
30
14:00-15:00 OH (Hoaran)
15:00-16:00 OH (Meishan)
16:00-17:00 OH (David Xu)
18:00-18:00 Quiz 6 begins
01
11:30-12:30 OH (Kaushal)
16:30-17:30 OH (Andrew)
02
9:00-10:00 OH (Rachel)
10:30-11:20 Lecture
HTTP Serviers & Web Clients: HTTP, Spark, and Web Requests (slides)
Code Examples
18:00-19:00 OH (Ardi)
03
Section
HW9: JSON & Fetch (slides)
15:00-16:00 OH (Alexey)
17:00-18:00 OH (Yiyang)
23:00 HW8 due
04
10:30-11:20 Lecture
Debugging: concepts and tips (slides)
14:00-15:00 OH (David Ross)
15:30-16:30 OH (Manchen)

December
MondayTuesdayWednesdayThursdayFriday
07
10:30-11:20 Lecture
Design Patterns: overview, factories, and builders (slides)
EJ 1, 2, 4
14:00-15:00 OH (Hoaran)
15:00-16:00 OH (Meishan)
16:00-17:00 OH (David Xu)
08
11:30-12:30 OH (Kaushal)
16:30-17:30 OH (Andrew)
09
9:00-10:00 OH (Rachel)
10:30-11:20 Lecture
More Design Patterns: sharing, structural, and behavioral (slides)
18:00-19:00 OH (Ardi)
10
Section
Design Patterns (slides)
worksheet (solution)
15:00-16:00 OH (Alexey)
17:00-18:00 OH (Yiyang)
23:00 HW9 due
11
10:30-11:20 Lecture
Real World (Anti-)Patterns (slides)
14:00-15:00 OH (David Ross)
15:30-16:30 OH (Manchen)
18:00-18:00 Quiz 7 begins