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/27:
Lecture 11: Defining sameness for complex data, part 1
Sameness of data values
Lecture 12: Defining sameness for complex data, part 2
More of the same
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/30:
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