Classes Taught / Labs Designed

CS/Math 290: Digital 3D Geometry, Spring 2016

As part of the Bass Instructor of Record Fellowship, I designed a new undergraduate course at Duke University cross-listed between computer science and math. The course was a ground up approach to 3D geometry with a statistics and signal processing focus. Assignments were in Javascript/WebGL and Python/Numpy, including sound modeling in virtual acoustic environments, rotation modeling with Euler angles and quaternions, 3D shape statistics ("Shape Google"), 3D shape alignment, and spectral mesh processing.

Click here to see the midterm exam I designed. Below are some highlights from the course syllabus

IID Data Expeditions Labs, Fall 2014

I designed two different labs using music to get undergraduates interested in signal processing. One was a more traditional lab on pitch extraction in a digital signal processing course (ECE 381), and the other one was using novel topological techniques from my research to analyze the "shape" of the music. Click on the links below to view the assignments.


CS/Math 290: Digital 3D Geometry student evaluations

Teaching Triangles Observations

Teaching Statement

Below I will elaborate on key aspects of my teaching philosophy which have evolved from my experience as a graduate student between three departments: electrical engineering, computer science, and math. While I am qualified teach courses in any of these three areas, I am more interested in fusing the three. A prime example of this was in my course 3D Digital Geometry, which I designed from scratch as part of the Bass IOR Fellowship, and I will be using that as an example throughout.

Math + Engineering: Both Sides Grow Past Comfort Zone

One of my key teaching aims is to foster multidisciplinary scientific skills, which matches my background. First, I like to trick engineers/computer scientists into learning higher level math, only later to show them this is a portal into a much deeper world that they are intellectually capable of exploring. Some of my best research ideas have come from math in unexpected ways, such as my geometric approach to video analysis. Thus, application-oriented students will grow and benefit from a more mathematical approach to their work.

There was a computer science student in my geometry class who had been afraid of math her whole life. She knew she was a strong coder, but she told me she had zero confidence in her math abilities and was always comparing herself unfavorably to other students in the class. She regularly attended office hours, so I worked with her a lot throughout the course. I was able to show her that a lot of the skills she had developed in computer science translated to math (patience, practice, quantitative thinking, "debugging"). With her hard work and my guidance, she ended up getting the highest grade on the final assignment on Laplacian Meshes, which was by far the most mathematically advanced out of the assignments, and she told me the visual aspects and applications of that assignment really helped to solidify her understanding (which is precisely how I, myself, often grapple with difficult math concepts).

On the other side of the spectrum, mathematical students who develop important practical skills, such as programming and web design, can reach a wider audience with their work in the future. It is also important for them study application domains deeply and to figure out where math is truly needed, so that when they pick applications to illustrate the importance of their work they can stand up to people who challenge them that much simpler engineering techniques could get the job done. I have had to stand up to this criticism myself, which is part of the reason I prep the math students this way in an increasingly interdisciplinary world.

One specific success story I have with this dual approach is a math student whose independent research I mentored, who was a math whiz but who came in with very little programming experience. He took to computer vision and image processing as a gateway into coding, since they have a more mathematical than average foundation. He then ended up working part time for a computer vision startup using a lot of the skills he learned, which energized him and motivated him to learn more about hacking than he ever would have without push outside of his comfort zone. Now he is going to start as a software engineer at Google during Fall 2017.

Math students can also keep me more honest and rigorous than I would otherwise be. Math students often catch my mistakes in class, and they have unique ideas to contribute. For example, in an assignment on the topology of music, I asked the students to relate the shape of a higher dimensional curve to the musical properties it represented after it was projected down to 3D. One of the math students pointed out to me that because of the projection, the visualization may be missing information that exists in higher dimensions, so the assignment questions asking students to reason about geometric properties were not entirely valid. I gave that student extra credit and used that as an opportunity to highlight to the entire class how important it is to be careful relying too heavily on visualizations (which a naive engineer might do) and why we need more abstract tools that work in high dimensional spaces, which were featured in other questions in that assignment.

Active Learning and Problem Solving In Class

When I took a teaching seminar on classroom assessment techniques, I realized how important it was to check for comprehension regularly. After I barrelled through a lecture on convex polygons that was very clear in my mind, a 1 minute anonymous worksheet exercise showed that nearly half of the class of very smart graduate students also taking the seminar could not classify polygons as convex or non-convex. Here are a couple of strategies I like to use to ensure I can detect and react to this in real time

  1. Raffle Point Problems: Every lecture, I give out challenge problems directly after teaching a new concept, and I go around the room and give "raffle point" to the first few groups of students who get that problem correct. At the end of the semester, the students can then cash out their raffle points to get prizes related to the course. In my digital geometry class, students got increasingly excited about this throughout the semester, and it often led to awesome interactions where some groups got the question partially right with a key mistake, and I was able to both give them a shoutout for their almost solution and to point out a very important pitfall to the class

  2. Wheel of Fortune: One of my favorite professors in college randomly called on people to help him finish an idea in a computer graphics class, and this kept us all very focused. While I don't do this every class, I sometimes like to pull out a wheel of fortune app I made which randomly picks on a student, while maintaining some suspense. Ironically, some of them told me in office hours they thought it was rigged to call on them, which worked to my advantage because it kept everyone on their feet whenever I pulled it up.

Assignments with Provided Skeleton Code and Visualization Software

For more programming oriented assignments, I like to fill in as much of the boilerplate and tedious code as possible, since I have noticed in lab settings that students often get stuck and frustrated at the beginning. An example of this is my lab on chroma features for pitch detection in music, where I got all of the tedious Matlab manipulations out of the way. Also, for the first assignment in my digital 3D geometry class, I wrote all of the code for visualizing and listening to generated impulse responses (essentially my own game engine, which was thousands of lines of code), and the students simply needed to fill in the core geometry processing. This made the assignments more accessible to those with less programming experience, such as math students, while simultaneously enabling those more experienced to spend more time on creative aspects, such as the extra credit "art contests". Also, some of the more engineering/computer science oriented students have remarked to me that the visualizations helped them to understand the math much better than they did before, as it was more "hands on."

Visual Lectures And Skeleton Slides

A picture is worth a thousand words, a few second video clip is worth hundreds of pictures, and an interactive app is worth an infinite number of videos. I exploit this hierarchy fully in my lectures. Wherever possible, I create interactive apps so the students can play around with mathematical ideas. Among these are the triangle circumcenter demo, the Euler Angles visualization app, and a principal component analysis viewer. Other times, it is more appropriate to make videos, such as my animations showing iterative closest points and animations showing the connection between Fourier analysis and rotation invariance.

Reaching and Including A Wide Audience via Internet Technologies

One of my hobbies in graduate school has been writing tutorials on my favorite topics on my web site. I took the leap of opening up my tutorials to comments and questions from the Internet, which turned out to be surprisingly rewarding. For instance, a viewer one time was confused about translation and rotation invarance of the Laplacian Mesh representation, which led to a fruitful discussion that now changes the way I frame that topic when I teach it. For instance, I was reminded that the Laplacian mesh representation is not rotation invariant, which I was sure to go over in my lecture on this topic. There are many more examples like this, including mistakes viewers have pointed out, which all mirror classroom experiences I have had but are more efficient because of the sheer size of the Internet audience. I also like to give students the option to share their projects with the world to keep them energized, which is part of the reason I developed my own geometry library, which I used in my digital 3D geometry class.