On this page:
Week 1
Week 2
Week 3
Week 4
Week 5
Week 6
Week 7
Week 8
Week 9
Week 10
Week 11
Week 12
Week 13
Week 14
Week 15
8.14

Syllabus🔗

Note: the schedule towards the end of the semester is tentative and will change as needed. I will update the exam dates as soon as rooms are available to be booked by the registrar.

Week 1🔗

1/06:

 

Lecture 1: Data Definitions in Java
Designing Data: Simple classes, classes with containment
Lecture 2: Data Definitions: Unions
Designing unions of classes; self-reference

1/08:

 

Lecture 3: Methods for simple classes
Methods for simple classes and classes with containment
Lecture 4: Methods for unions
Methods for unions of classes and classes with self-reference

1/09:

 

Lecture 4: Methods for unions
Methods for unions of classes and classes with self-reference
Lecture 5: Methods for self-referential lists
Designing methods for complex class hierarchies

1/10:

 

Lab 1
Data definitions in Java; Eclipse IDE; Handins homework server; simple methods

Week 2🔗

1/13:

 

Lecture 6: Accumulator methods
More complicated methods for self-referential data

1/15:

 

Lecture 7: Accumulator methods, continued
(continued) Methods with accumulators

1/16:

 

Lecture 8: Practice Design
Recap: designing methods and wish lists for a larger problem

1/17:

 

Lab 2
Designing methods in Java: classes, containment, unions, self-reference

Week 3🔗

1/20:

 

No class: MLK Day

1/22:

 

Lecture 9: Abstract classes and inheritance
Abstract classes and inheritance

1/23:

 

Lecture 10: Customizing constructors for correctness and convenience
Customizing constructors for correctness and convenience

1/24:

 

Lab 3
Practice white-box and black-box testing

Week 4🔗

1/29:

 

Lecture 13: Abstracting over behavior
Overview of world programming; Function objects
Lecture 14: Abstractions over more than one argument
More function objects

1/31:

 

Lab 4
Designing sameness methods; functional world games

Week 5🔗

2/03:

 

Lecture 16: Visitors
Visitors

2/05:

 

Homework review, practice with generics

2/06:

 

Exam review, additional practice with generics

2/07:

 

Lab 5
Equality, functional world games

Week 6🔗

2/10:

 

Lecture 17: Mutation
Creating cyclic data, mutation

2/12:

 

Lecture 18: Mutation inside structures
Testing mutation methods, indirect cycles

2/13:

 

Lecture 19: Mutation, aliasing and testing
Aliasing and equality, revisited

2/14:

 

Lab 6
Working with function objects, introduction to generics

Week 7🔗

2/17:

 

No class: Presidents’ Day

2/19:

 

Lecture 20: Mutable data structures
Removing items from lists, mutable lists
Lecture 21: ArrayLists
Direct-access data structures: ArrayList; swapping two items, mapping over ArrayLists, for-each loops
Midterm 1: 6:00--9:00PM
Snell Engineering 108

2/20:

 

Lecture 22: ArrayLists
ArrayLists and binary search; for-each loops; working with indices

2/21:

 

Lab 7

Week 8🔗

2/24:

 

Lecture 23: For-each loops and Counted-for loops
For-each loops and counted-for loops

2/26:

 

Lecture 24: While loops
While-loops

2/27:

 

Lecture 25: Iterator and Iterable
Iterators and Iterables

2/28:

 

Lab 8
Loyd's 15 puzzle: working with ArrayLists, loops and imperative worlds

Week 9🔗

3/03:

 

No class: Spring break

3/05:

 

No class: Spring break

3/06:

 

No class: Spring break

3/07:

 

No lab this week

Week 10🔗

3/10:

 

Lecture 26: Hashing and Equality
HashMap, equals

3/12:

 

Lecture 27: Introduction to Big-O Analysis
Big Oh: searching and sorting; insertion sort and selection sort

3/13:

 

Lecture 28: Quicksort and Mergesort
Big Oh: searching and sorting; quicksort and merge sort

3/14:

 

Lab 9
Tries

Week 11🔗

3/17:

 

Lecture 28: Quicksort and Mergesort
Big Oh: searching and sorting; quicksort and merge sort

3/19:

 

Lecture 29: Priority Queues and Heapsort
Big Oh: searching and sorting; HeapSort -- Priority Queue

3/20:

 

Lecture 30: Breadth-first search and Depth-first search on graphs
Graph algorithms: breadth-first search, depth-first search

3/21:

 

Lab 10
Heapsort, stress tests

Week 12🔗

3/24:

 

Lecture 35: Dynamic Programming
Dynamic programming: Solving recursive problems faster
Lecture 30: Breadth-first search and Depth-first search on graphs
Graph algorithms: breadth-first search, depth-first search

3/26:

 

Lecture 30: Breadth-first search and Depth-first search on graphs
Graph algorithms: breadth-first search, depth-first search

3/27:

 

Lecture 31: Dijkstra’s Algorithm for single-source shortest paths
Graph algorithms: Dijkstra's algorithm, and comparison with BFS/DFS

3/28:

 

Lab 11
Wider trees and advanced iterators

Week 13🔗

3/31:

 

Lecture 32: Minimum Spanning Trees
Minimum spanning trees: Prim's and Kruskal's algorithms
Midterm 2: 6:00--9:00PM
Snell Engineering 108

4/02:

 

Lecture 32: Minimum Spanning Trees
Minimum spanning trees: Prim's and Kruskal's algorithms
Design: Handin server data model

4/03:

 

Design: thinking playfully and creatively about algorithms

4/04:

 

Lab 12
Python

Week 14🔗

4/07:

 

Scope in Java: access modifiers and packages

4/09:

 

Java: Streams

4/10:

 

Lecture 34: Implementing Objects
Implementing Objects

4/11:

 

Lab 13
Streams

Week 15🔗

4/14:

 

Lecture 36
Wrap-up