# Teaching

This is a list of courses that I have taught. Descriptions are shown for the most recent offering of each course.

Spring 2022, Fall 2021, Spring 2021, Spring 2020

This course is an introduction to linear algebra and its usage in computational applications. The study of linear equations, linear functions, and their representations pervades numerous fields of study. Students will learn and practice fundamental ideas of linear algebra and simultaneously be exposed to and work with real-world applications of these ideas. This course emphasizes a rigorous approach to mathematics, which will serve as a foundation for future courses like computer graphics, machine learning, and robotics. The learning and usage of Python and libraries such as NumPy is an essential component of the course, as is the development of basic skills of computational programming.

Spring 2022, Summer 2021, Fall 2020, Fall 2019, Fall 2018

Artificial intelligence (AI) is a broad, interdisciplinary, and fast-growing subfield of computer science concerned with the construction and deployment of intelligent agents. This course provides an overview of the methods and applications of AI, with a focus on algorithms and computation. Topics include search problems, games, Markov decision processes, reinforcement learning, Bayesian networks, Markov models, machine learning, and applications throughout. Students will develop intuition and algorithmic thinking through written as well as programming problems in Python. By the end of the course, students will be able to build intelligent agents that can solve problems through search, make decisions and reason in the face of uncertainty, and learn simple models from data.

Fall 2021, Spring 2021, Spring 2019

This course is an introduction to robotics from a computer scientistâ€™s perspective. While robotics is inherently broad and interdisciplinary, we will primarily focus on ideas with roots in computer science, as well as the roles that a computer scientist would play in a robotics research or engineering task. Topics include motion planning, state estimation, localization and mapping, kinematics, and robot learning.

Spring 2019

The study of discrete mathematics provides an important foundation for basic theoretical principles in computer science. This course starts by building a strong background in logic and formal proofs, particularly those constructed by induction. After developing the ability to write coherent, rigorous proofs, we will study topics relating to functions, number theory, group theory, counting, and graph theory. Applications in cryptography, error correcting codes, and other areas of computer science will be considered as time permits.

Spring 2013 - Spring 2018 (Carnegie Mellon)

Although I was never a formal instructor for this course, I initially was a graduate student TA and then worked closely with my advisor in subsequent semesters to implement an online curriculum for present offerings of the course.

Summer 2012 (UC Berkeley)

This was my first foray into teaching as a 5-time TA and instructor for a course in introductory circuits during my undergraduate years at Berkeley.