Teaching

Teaching Overview

My goals as a teacher are to make the core concepts of algorithms and data structures accessible to everyone and to broaden participation in computer science by demonstrating how these concepts can be applied in many interdisciplinary fields.

More broadly, I am interested in teaching a wide range of algorithms, data structures, and data science courses for computer science and inter-disciplinary students (with a notable interest in the intersection of biology and computer science).

Courses Taught:

Data Structures (CS 225)

Data abstractions: elementary data structures (lists, stacks, queues, and trees) and their implementation using an object-oriented programming language. Solutions to a variety of computational problems such as search on graphs and trees. Elementary analysis of algorithms.

This course is an intermediate-level programming course in the CS core curriculum. The course explores fundamental data structures as well as algorithms that use these data structures to an audience with existing understanding of C++ and programming fundamentals. The target goals of the course are to refine student’s abilities to design and implement complex coding projects, analyze the performance of different structures, and justify the optimal implementation choices given specific contexts.

Semester Taught: Fall 2020, Spring 2021, Fall 2022, Spring 2022, Fall 2023, Spring 2023, Fall 2024


Algorithms and Data Structures for Data Science (CS 277)

Introduction to elementary concepts in algorithms and classical data structures with a focus on their applications in Data Science. Topics include algorithm analysis (ex: Big-O notation), elementary data structures (ex: lists, stacks, queues, trees, and graphs), basics of discrete algorithm design principles (ex: greedy, divide and conquer, dynamic programming), and discussion of discrete and continuous optimization.

This core Data Science course is an introduction to elementary concepts in algorithms and classical data structures, focusing on their role in Data Science. Students will begin the course by practicing the fundamentals on how to design and implement solutions to computational problems in Python. As they progress, the use cases will move onto learning how to use and implement a variety of elementary data structures (ex: lists, trees, graphs, sets, and hash tables). By the end of the course, students should be able to design, implement, and justify the use of foundational algorithms and data structures.

Semester Taught: Fall 2021, Spring 2023, Spring 2024, Spring 2025


String Algorithms and Data Structures (CS 199-225)

This course explores a wide range of algorithms and data structures designed for efficient exact and inexact pattern matching. Topics include preprocessing, dynamic programming, compression, data transformation, as well as the theory knowledge to justify trade-offs in strategies for Big Data contexts.

This Honors course focuses on advanced and special topics related to concepts seen in CS 225 and provides an additional weekly coding challenge focusing on algorithmic optimization in both space and time. By the end of the course, students will be able to implement and justify a variety of approaches for the storage and analyze of string datasets.

Semester Taught: Fall 2020, Spring 2021, Fall 2022, Spring 2022, Spring 2023, Fall 2024


Discrete Structures (CS 173)

Discrete mathematical structures frequently encountered in the study of Computer Science. Sets, propositions, Boolean algebra, induction, recursion, relations, functions, and graphs.

This core CS course is an introduction to mathematics and computational theory topics necessary to read and write proofs or formal mathematical notation. By the end of the course, students will have a strong foundation of knowledge needed for more advanced CS theory courses.

Semester Taught: Summer 2022