Schedule

The schedule below shows the tentative dates for all class topics, readings, and major assignments (MPs and SoLAs). You should complete all assigned readings by 10 p.m. on the night before the class in which they are listed. You should complete all lab writeups before the next class session. You can find the full list of due dates on Gradescope.

Due dates for major assignments will not change. However, the particular topics we cover each day may change as we discover that we need more (or less) time on each topic.

If the title of a class session is blue, you should be able to click on it to view the eboard for that class session.

If you view this page with JavaScript enabled you can jump to the current week on the schedule, and you should see the next day of class highlighted in the schedule below.

Week 0 : Getting Started
Th
Aug 29
class 1

Getting started

We begin the course by exploring some key ideas. We also practice ADT and data structure design.

Topics: Course goals. Course structure. Academic honesty. ADTs and data structures. Designing a fraction ADT. A bit about OOP.

Week 1 : Getting started with Java

Tu
Sep 3
class 2

Getting started with Java

We consider some basic issues of Java programming.

Topics: From C to Java. The structure of a Java program. Compiling and running Java programs. Strings in Java. Numeric types in Java. Arrays in Java. Basic output in Java. Basic input in Java.


Th
Sep 5
class 3

Getting started with Java development

We consider tools for developing programs in Java, particularly the Microsoft VSCode integrated development environment (IDE) and the Git version control system.

Topics: IDEs. VSCode basics. Version control. Git basics.

Week 2 : More fun with Java
Su
Sep 8
 
Due
  • MP 1 Pre-reflection

Tu
Sep 10
class 4

Objects and classes

We consider Java’s approach to objects, the primary building block of object-oriented programming. We also explore Java’s classes and how one might model them.

Topics: Object basics. Modeling objects with classes.


Th
Sep 12
class 5

Unit testing and debugging

We return to concepts of unit testing and habits of debugging that you first learned in CSC 151. We also introduce the concept of test-driven development, common among agile developers.

Topics: A few thoughts on testing. An example. Test-driven development. Why use debuggers. Debugging vs. print statements. Debugging in VSCode.


F
Sep 13
 
Due
  • MP 1 Post-reflection
Week 3 : Polymorphism
Su
Sep 15
 
Due
  • MP 2 Pre-reflection

M
Sep 16
 

Tu
Sep 17
class 6

Interfaces and subtype polymorphism

We consider interfaces, which serve as specifications of expected behavior for classes. We also explore how interfaces support one form of polymorphism, a key aspect of object-oriented programming.

Topics: Detour: Pair Programming, Revisited. Interfaces. The building blocks of OOP. Subtype polymorphism.


Th
Sep 19
class 7

Generics and parametric polymorphism

We continue our explortation of polymorphism by considering a second type of polymorphism, parametric polymorphism, and its realization in Java’s generics.

Topics: Parametric polymorphism. Java generics. Generic classes. Generic interfaces. Generic methods. Generics and arrays.


F
Sep 20
 
Due
  • MP 2 Post-reflection
Week 4 : Other object concepts
Su
Sep 22
 
Due
  • MP 3 Pre-reflection

M
Sep 23
 

Tu
Sep 24
class 8

Exceptional programming

We introduce exceptions and consider their use.

Topics: Exceptions. Object-oriented design.


Th
Sep 26
class 9

Design day

We practice some design in preparation for MP4.

Topics: ADT design, revisited. Data structure design, revisited. Dictionaries. Associative arrays.


F
Sep 27
 
Due
  • MP 3 Post-reflection
Week 5 : From objects the ADTs
Su
Sep 29
 
Due
  • MP 4 Pre-reflection

M
Sep 30
 
Due
  • SoLA 3

Tu
Oct 1
class 10

Inheritance and composition

We consider inheritance, other core aspects of object-oriented design. We also consider some underlying issues in the design and implementation of objects in Java and how we might represent objects visually.

Topics: Inheritance basics. Inheritance and polymorphism. Composition. Compile time vs. run time. References. Representing objects.


Th
Oct 3
class 11

Linear structures

We consider a few basic structures, such as queues and stacks, and generalize them to linear structures. We explore ways in which arrays and simple linked objects can be used to implement linear structures. We practice building linked linear structures.

Topics: The design of ADTs, revisited. A list ADT. Linear structures. Stacks. Queues. Priority queues. Other linear structures. Implementing linear structures with arrays. Implementing linear structures as linked structures.

Assigned
  • Mini-Project 5: Augmentive and Alternative Communication Devices

F
Oct 4
 
Due
  • MP 4 Post-reflection
Week 6 : From ADTs to objects
Su
Oct 6
 
Due
  • MP 5 Pre-reflection

M
Oct 7
 
Due
  • SoLA 4

Tu
Oct 8
class 12

Array-based linear structures

We explore ways in which arrays can be used to implement linear structures.

Topics: Detour: Wrappers. Implementing linear structures with arrays. Array-based queues. Priority queues and their implementation.


Th
Oct 10
class 13

Iterators and Comparators

We consider iterators, a standard mechanism for accessing the elements of a collection, and explore the use of Java’s anonymous inner classes to build iterators. We consider comparators, a standard mechanism for comparing values, and explore the use of Java’s lambdas to implement comparators.

Topics: Iterators. Iterating array-based structures. Iterating linked linear structures. Named iterators. Anonymous inner classes. Anonymous functions reviewed. Anonymous functions in Java. Functional interfaces.

Due
  • Mini-Project 5: Augmentive and Alternative Communication Devices
Assigned
  • Mini-Project 6: To be determined

F
Oct 11
 
Due
  • MP 5 Post-reflection
Week 7 : Algorithms
Su
Oct 13
 
Due
  • MP 6 Pre-reflection

M
Oct 14
 
Due
  • SoLA 5

Tu
Oct 15
class 14

Analyzing algorithms

We consider ways to analyze the resource use of algorithms, including formal notation for describing that use.

Topics: Comparing algorithms. Empirical analysis. Asymptotic analysis. Counting steps. Big-O, formalized. Implications of Big-O. Practice with Big-O. Comparing Big-O and empirical approaches.

Reading
  • CLRS 3 (Characterizing Running Times)
Lab
  • No lab
Assigned
  • SoLA 6 (optional)

Th
Oct 17
class 15

Analyzing recursive algorithms

We consider techniques for analyzing recursive algorithms.

Topics: Iterative analysis, revisited. Recurrence relations. Approaches to recurrence relations.

Readings
  • CLRS 4 (intro)
  • CLRS 4.3 – I-4.5 (Methods for solving recurrences)
Due
  • Mini-Project 6: To be determined
Assigned
  • Mini-Project 7: To be determined

F
Oct 18
 
Due
  • MP 6 Post-reflection
Fall Break
Week 8 : Searching and sorting
Su
Oct 27
 
Due
  • MP 7 Pre-Reflection

M
Oct 28
 
Due
  • SoLA 6 (optional)

Tu
Oct 29
class 16

Searching

We consider the problem of searching a collection and techniques for searching various kinds of collections. We also consider loop invariants, a technique for helping ensure the correctness of programs.

Topics: Modeling the problem of searching. Sequential search. Predicates. Binary search. Comparators. Testing binary search. Reasoning about iterative algorithms. The state of a program. Loop invariants.


Th
Oct 31
class 17

Sorting

We return to the problem of sorting a list or array.

Topics: The problem of sorting. Testing sorting algorithms. Insertion sort. Selection sort. Generic sorts.

Lab
  • No lab
Due
  • Mini-Project 7: To be determined
Assigned
  • Mini-Project 8: To be determined

F
Nov 1
 
Due
  • MP 7 Post-reflection
Week 9 : Miscellaneous
Su
Nov 3
 
Due
  • MP 8 Pre-reflection

M
Nov 4
 
Due
  • SoLA 7

Tu
Nov 5
class 18

Divide-and-conquer sorting mechanisms: Merge sort and Quicksort

We consider the classic merge sort and Quicksort algorithm.

Topics: Lower bounds on sorting. Divide-and-conquer algorithms. An introduction to merge sort. Analyzing merge sort. A quick introduction to Quicksort. Partitioning. Partitioning with invariants. Key ideas from Quicksort.


Th
Nov 7
class 19

Doubly-linked lists

We explore more sophisticated versions of the linked-list data structure

Topics: Linked lists, reviewed. Doubly-linked lists. Circularly-linked lists. Other list issues.


F
Nov 8
 
Due
  • MP 8 Post-reflection
Week 10 : Miscellaneous
Su
Nov 10
 
Due
  • MP 9 Pre-reflection

M
Nov 11
 
Due
  • SoLA 8

Tu
Nov 12
class 20

Ethical considerations (+ sorting competition)

We consider our responsibilities as programming professionals. We also compare sorting algorithms from the latest mini-project.

Topics: Professional ethics.. Sorting competition.

Lab
  • No lab
Assigned
  • SoLA 9

Th
Nov 14
class 21

Trees and tree traversal

We introduce the tree structure and mechanisms for iterating trees.

Topics: Representing hierarchical information. Tree terminology. Depth-first and breadth-first traversal. Recursive depth-first traversal. Iterative breadth-first traversal. Iterative depth-first traversal. Pre-order, in-order, and post-order traversals.

Due
  • Mini-Project 9: To be determined
Assigned
  • Mini-Project 10: To be determined

F
Nov 15
 
Due
  • MP 9 Post-reflection
Week 11 : Dictionaries
Su
Nov 17
 
Due
  • MP 10 Pre-reflection

M
Nov 18
 
Due
  • SoLA 9

Tu
Nov 19
class 22

A Dictionary ADT and binary search trees

We introduce the Dictionary (a.k.a. Map) abstract data type and some simple implementations.

Topics: Maps and dictionaries. Designing a Dictionary ADT. Associative arrays. Association lists.

Reading
  • No reading
Assigned
  • SoLA 10

Th
Nov 21
class 23

Hash tables

We consider hash tables, one of the most efficient implementations of the Map abstract data type. We also explore the issue of hash functions.

Topics: Integer maps. From objects to integers. Handling collisions. Rebuilding hash tables. Hash functions.

Lab
  • No lab
Due
  • Mini-Project 10: To be determined
Assigned
  • Mini-Project 11: TBD

F
Nov 22
 
Due
  • MP 10 Post-reflection
Week 12 : Hash tables
M
Nov 25
 
Due
  • SoLA 10

Tu
Nov 26
class 24

Implementating hash tables

We explore the two primary collision-resolution mechansims in hash tables.

Topics: Collisions. Linear probing. Quadratic probing. Buckets and chaining.

Reading
  • No reading
Assigned
  • SoLA 11 (optional)
Thanksgiving Break
Week 13 : Graphs
Su
Dec 1
 
Due
  • MP 11 Pre-reflection

M
Dec 2
 
Due
  • SoLA 11 (optional)

Tu
Dec 3
class 25

Priority queues, heaps, and heap sort

We return to the subject of priority queues and consider heaps, one of the more efficient ways to represent priority queues.

Topics: Priority queues, revisited. The heap structure. Adding elements to heaps. Removing elements from heaps. Storing trees in arrays.

Lab
  • No lab
Assigned
  • SoLA 12

Th
Dec 5
class 26

Graphs: An ADT and basic traversal techniques

We consider a graph abstract data type and some common implementations of graphs.

Topics: Modeling problems with graphs. Graph terminology. Weighted graphs. Directed graphs. Implementing graphs with adjacency matrices. Implementing graphs with adjacency lists. Implementing graphs with edge tables.


F
Dec 6
 
Due
  • MP 11 Post-reflection
Week 14 : Wrapup
Su
Dec 8
 
Due
  • MP 12 Pre-reflection

M
Dec 9
 
Due
  • SoLA 12

Tu
Dec 10
class 27

Minimum spanning trees

We consider how to build minimum spanning trees in graphs

Topics: Minimum spanning trees. Strategies for building minimum spanning trees. Kruskal’s algorithm. Prim’s algorithm. Greed as an approach to algorithm design.


Th
Dec 12
class 28

Wrapup

We conclude the course.

Topics: The subject matter(s) of the course. Debrief. Course evaluation.

Reading
  • No reading
Lab
  • No lab
Due
  • Mini-Project 12: TBD

F
Dec 13
 
Due
  • MP 12 Post-reflection
Finals Week
M
Dec 16
 
Due
  • SoLA 13

F
Dec 20
class 29

All work due

All work for the class is due on Friday of finals week.

Reading
  • No reading
Lab
  • No lab
Due
  • SoLA 14
Winter Break