teaching
information about current and past courses
Current Modules
Previous Courses Elsewhere
Course List
Spring 2023 (Amherst College)
- COSC 225: Algorithms and Visualization
course description
In this course, we will explore how algorithmic and aesthetic principles can be employed in concert to create interactive graphical content on the web. Topics will include design layout and combinatorial optimization, the geometry of color spaces, graph drawing, computational geometry, generative design, and visualization of data and algorithms. In addition, we will consider issues of algorithmic efficiency in performing computationally intensive tasks. We will investigate topics from both theoretical and applied perspectives. Students will code projects using standard web development tools: HTML, CSS, and JavaScript.
- COSC 273: Parallel and Distributed Computing
course description
Modern computers are becoming increasingly parallel, with many cores or processors working concurrently to perform a single task. In order to utilize the full power of modern computers, it is essential to write programs that exploit parallelism. This course introduces students to the art and science of writing parallel programs. We consider two computing paradigms: shared memory and message passing. We will introduce standard libraries for writing efficient code in each paradigm, and create software that is many times faster than any serial (non-parallel) program performing the same task.
Fall 2022 (Amherst College)
- COSC 311: Algorithms
course description
This course addresses the design and analysis of computer algorithms. Topics include: set algorithms such as sorting and searching, graph algorithms, string algorithms, and matrix algorithms. Algorithm design paradigms, including the divide-and-conquer, dynamic programming, and greedy paradigms, will be emphasized. The course will end with a discussion of the theory of NP-completeness and its implications.
Spring 2022 (Amherst College)
- COSC 211: Data Structures
course description
A fundamental problem in computer science is that of organizing data so that it can be used effectively. This course introduces basic data structures and their applications. Major themes are the importance of abstraction in program design and the separation of specification and implementation. Program correctness and algorithm complexity are also considered. Data structures for lists, stacks, queues, dictionaries, sets, and graphs are discussed. This course will provide advanced programming experience.
- COSC 373: Distributed Algorithms
course description
A distributed system consists of a network of processors that communicate by exchanging messages. No processor has a global view of the network, so neighboring processors must communicate in order for the system to perform a given task. In this course, we will study the theory of distributed systems. We will consider fundamental algorithmic tasks—for example, finding spanning trees, maximal independent sets, and graph coloring—in several models of distributed computing. Our goal is to understand under what conditions these tasks can be performed efficiently, if at all. While this course is primarily theoretical, we will discuss applications of the theory to modern computing paradigms (e.g., MapReduce).
Fall 2021 (Amherst College)
Spring 2021 (Amherst College)
Fall 2020 (Amherst College)
- COSC 112: Introduction to Computer Science II
Fall/Winter 2018 (MPI/University of Saarland)
- Advanced Seminar: Algorithms on Digraphs
Spring 2016 (UCLA)
- PIC10B: Intermediate Programming
Fall 2015 (UCLA)
- Math 475: Teaching College Mathematics
Fall 2014 (UCLA)
- Math 32AH: Calculus of Several Variables (Honors)