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

March
MondayTuesdayWednesdayThursdayFriday
30
10:30-11:20 Lecture
GUG 220
Motivation and Administrivia (slides)
12:30-11:20 OH (Aditya)
13:30-14:20 OH (Chloe)
14:30-15:20 OH (Jasmine)
15:30-16:20 OH (Yihang)
31
13:30-14:20 OH (Rachel)
15:00-15:50 OH (Frank)
16:00-16:50 OH (Meishan)
18:30-19:20 OH (Manchen)
01
9:30-10:20 OH (Alexey)
10:30-11:20 Lecture
GUG 220
Reasoning about straight line code: Hoare logic, reasoning, if statements (slides: recorded and live)
PP 38; more lecture notes (optional)
15:00-16:00 OH (Andrew)
17:00 HW0 due
02
Section
HW1: reasoning about code
slides and worksheet (solution)
14:30-15:30 OH (Dmitriy)
15:30-16:30 OH (Sherry)
03
10:30-11:20 Lecture
GUG 220
Reasoning about loops: loop invariants and examples (slides: recorded and live)
11:30-12:20 OH (Chanwut)
13:00-14:00 OH (Kevin)
16:00-16:50 OH (David)

April
MondayTuesdayWednesdayThursdayFriday
06
10:30-11:20 Lecture
GUG 220
Writing Loops: concepts and an important example (slides: recorded and live)
more lecture notes (optional)
12:30-11:20 OH (Aditya)
13:30-14:20 OH (Chloe)
14:30-15:20 OH (Jasmine)
15:30-16:20 OH (Yihang)
23:00 HW1 due
07
13:30-14:20 OH (Rachel)
15:00-15:50 OH (Frank)
16:00-16:50 OH (Meishan)
18:30-19:20 OH (Manchen)
08
9:30-10:20 OH (Alexey)
10:30-11:20 Lecture
GUG 220
(Optional) Writing Loops: an interview question (slides)
15:00-16:00 OH (Andrew)
09
Section
HW3: Java tools
slides
14:30-15:30 OH (Dmitriy)
15:30-16:30 OH (Sherry)
10
10:30-11:20 Lecture
GUG 220
Specifications: overview, how to, and comparisons (slides: recorded and live)
PP 23
11:30-12:20 OH (Chanwut)
13:00-14:00 OH (Kevin)
16:00-16:50 OH (David)
13
10:30-11:20 Lecture
GUG 220
Data Abstraction (ADTs): overview and Java examples (slides: recorded and live)
12:30-11:20 OH (Aditya)
13:30-14:20 OH (Chloe)
14:30-15:20 OH (Jasmine)
15:30-16:20 OH (Yihang)
14
13:30-14:20 OH (Rachel)
15:00-15:50 OH (Frank)
16:00-16:50 OH (Meishan)
18:30-19:20 OH (Manchen)
15
9:30-10:20 OH (Alexey)
10:30-11:20 Lecture
GUG 220
Abstraction Functions: overview and in-depth example (slides: recorded and live)
Code Examples
15:00-16:00 OH (Andrew)
23:00 HW3 due
16
Section
HW4, AFs, & JUnit
slides and worksheet
14:30-15:30 OH (Dmitriy)
15:30-16:30 OH (Sherry)
17
10:30-11:20 Lecture
GUG 220
Representation Invariants: overview and defensive programming tips (slides: recorded and live)
EJ 49, 50, 17, 52
11:30-12:20 OH (Chanwut)
12:00-12:30 Quiz 1 starts
13:00-14:00 OH (Kevin)
16:00-16:50 OH (David)
20
10:30-11:20 Lecture
GUG 220
Testing: overview and heuristics (slides: recorded and live)
PP 41
12:30-11:20 OH (Aditya)
13:30-14:20 OH (Chloe)
14:30-15:20 OH (Jasmine)
15:30-16:20 OH (Yihang)
21
13:30-14:20 OH (Rachel)
15:00-15:50 OH (Frank)
16:00-16:50 OH (Meishan)
18:30-19:20 OH (Manchen)
22
9:30-10:20 OH (Alexey)
10:30-11:20 Lecture
GUG 220
More Testing: code coverage and tools & tips (slides)
15:00-16:00 OH (Andrew)
23:00 HW4 due
23
Section
HW5 pt1: graphs, testing, and rep exposure
slides, test design worksheet (solution), and rep exposure worksheet (solution)
14:30-15:30 OH (Dmitriy)
15:30-16:30 OH (Sherry)
24
10:30-11:20 Lecture
GUG 220
Module Design & Style: concepts, Java specifics, and readability (slides)
11:30-12:20 OH (Chanwut)
12:00-12:30 Quiz 2 starts
13:00-14:00 OH (Kevin)
16:00-16:50 OH (David)
27
10:30-11:20 Lecture
GUG 220
Identity, Equality, & Hashing I: overview and Java details (slides)
EJ 10, 11
12:30-11:20 OH (Aditya)
13:30-14:20 OH (Chloe)
14:30-15:20 OH (Jasmine)
15:30-16:20 OH (Yihang)
28
13:30-14:20 OH (Rachel)
15:00-15:50 OH (Frank)
16:00-16:50 OH (Meishan)
18:30-19:20 OH (Manchen)
29
9:30-10:20 OH (Alexey)
10:30-11:20 Lecture
GUG 220
Identity, Equality, & Hashing II: equals with mutability and hashCode (slides: recorded and live)
15:00-16:00 OH (Andrew)
30
Section
HW5 pt2, equals, & hashCode
slides and worksheet (solution)
14:30-15:30 OH (Dmitriy)
15:30-16:30 OH (Sherry)
01
10:30-11:20 Lecture
GUG 220
Exceptions & Assertions: concepts, Java assertions, Java exceptions, exception design / style, special values, and finally blocks (slides: recorded and live)
PP 25
11:30-12:20 OH (Chanwut)
12:00-12:30 Quiz 3 starts
13:00-14:00 OH (Kevin)
16:00-16:50 OH (David)

May
MondayTuesdayWednesdayThursdayFriday
04
10:30-11:20 Lecture
GUG 220
Debugging: concepts and tips (slides)
12:30-11:20 OH (Aditya)
13:30-14:20 OH (Chloe)
14:30-15:20 OH (Jasmine)
15:30-16:20 OH (Yihang)
05
13:30-14:20 OH (Rachel)
15:00-15:50 OH (Frank)
16:00-16:50 OH (Meishan)
18:30-19:20 OH (Manchen)
06
9:30-10:20 OH (Alexey)
10:30-11:20 Lecture
GUG 220
Subtypes I: overview (slides, first 9 slides only)
EJ 40, 18, 19
15:00-16:00 OH (Andrew)
07
Section
HW6: parsing data files
slides, worksheet (solution), and demo code
14:30-15:30 OH (Dmitriy)
15:30-16:30 OH (Sherry)
08
10:30-11:20 Lecture
GUG 220
Subtypes II: examples, Java details, and advice (slides)
EJ 40, 18, 19
11:30-12:20 OH (Chanwut)
12:00-12:30 Quiz 4 starts
13:00-14:00 OH (Kevin)
16:00-16:50 OH (David)
11
10:30-11:20 Lecture
GUG 220
Generics I: generic types, generic methods, subtyping, and bounds (slides)
EJ 28, 30
12:30-11:20 OH (Aditya)
13:30-14:20 OH (Chloe)
14:30-15:20 OH (Jasmine)
15:30-16:20 OH (Yihang)
12
13:30-14:20 OH (Rachel)
15:00-15:50 OH (Frank)
16:00-16:50 OH (Meishan)
18:30-19:20 OH (Manchen)
13
9:30-10:20 OH (Alexey)
10:30-11:20 Lecture
GUG 220
Generics II: wildcards, arrays, type erasure, and final thoughts (slides: recorded and live)
15:00-16:00 OH (Andrew)
23:00 HW6 due
14
Section
HW7: Dijkstra's algorithm
slides and worksheet (solution)
14:30-15:30 OH (Dmitriy)
15:30-16:30 OH (Sherry)
15
10:30-11:20 Lecture
GUG 220
Callbacks, Events, & Event-Driven Programs: callbacks and events, event-driven programs, and a detailed example (slides)
Code Examples
11:30-12:20 OH (Chanwut)
12:00-12:30 Quiz 5 starts
13:00-14:00 OH (Kevin)
16:00-16:50 OH (David)
18
10:30-11:20 Lecture
GUG 220
User Interfaces & JavasScript: UIs, JS, and classes (slides)
Code Examples
12:30-11:20 OH (Aditya)
13:30-14:20 OH (Chloe)
14:30-15:20 OH (Jasmine)
15:30-16:20 OH (Yihang)
19
13:30-14:20 OH (Rachel)
15:00-15:50 OH (Frank)
16:00-16:50 OH (Meishan)
18:30-19:20 OH (Manchen)
20
9:30-10:20 OH (Alexey)
10:30-11:20 Lecture
GUG 220
Modern Web UIs: Classic, ES6, TypeScript, React pt1, React pt2 (slides: recorded and live)
Code Examples
15:00-16:00 OH (Andrew)
23:00 HW7 due
21
Section
HW8: TypeScript & React
slides and code examples
14:30-15:30 OH (Dmitriy)
15:30-16:30 OH (Sherry)
22
10:30-11:20 Lecture
GUG 220
JS / React Q & A (slides: live)
11:30-12:20 OH (Chanwut)
12:00-12:30 Quiz 6 starts
13:00-14:00 OH (Kevin)
16:00-16:50 OH (David)
25
Memorial Day
26
13:30-14:20 OH (Rachel)
15:00-15:50 OH (Frank)
16:00-16:50 OH (Meishan)
18:30-19:20 OH (Manchen)
27
9:30-10:20 OH (Alexey)
10:30-11:20 Lecture
GUG 220
HTTP Servers & Web Clients: overview, HTTP protocol, Spark Java, web requests (slides)
Code Examples
15:00-16:00 OH (Andrew)
28
Section
HW9: JSON & Fetch
slides
14:30-15:30 OH (Dmitriy)
15:30-16:30 OH (Sherry)
23:00 HW8 due
29
10:30-11:20 Lecture
GUG 220
HTTP Servers & Web Clients Q & A
11:30-12:20 OH (Chanwut)
12:00-12:30 Quiz 7 starts
13:00-14:00 OH (Kevin)
16:00-16:50 OH (David)

June
MondayTuesdayWednesdayThursdayFriday
01
10:30-11:20 Lecture
GUG 220
Design Patterns I: overview, factories, and builders (slides)
EJ 1, 2, 4
12:30-11:20 OH (Aditya)
13:30-14:20 OH (Chloe)
14:30-15:20 OH (Jasmine)
15:30-16:20 OH (Yihang)
02
13:30-14:20 OH (Rachel)
15:00-15:50 OH (Frank)
16:00-16:50 OH (Meishan)
18:30-19:20 OH (Manchen)
03
9:30-10:20 OH (Alexey)
10:30-11:20 Lecture
GUG 220
Design Patterns II: sharing, structural, behavioral (slides)
15:00-16:00 OH (Andrew)
04
Section
Demos
14:30-15:30 OH (Dmitriy)
15:30-16:30 OH (Sherry)
05
10:30-11:20 Lecture
GUG 220
Real-World Patterns
11:30-12:20 OH (Chanwut)
12:00-12:30 Quiz 8 starts
13:00-14:00 OH (Kevin)
16:00-16:50 OH (David)