teaching

information about current and past courses

Current Courses

  • On sabbatical, Fall 2023 and Spring 2024
Previous Courses
Courses @Amherst
Spring 2023
  • 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
  • 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
  • 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
Spring 2021
Fall 2020
  • COSC 112: Introduction to Computer Science II
Courses Elsewhere
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)