Current Course

CS 577, Introduction to Algorithms. Summer 2022

Past Courses


Machine Learning


Data Science


Some examples of videos from my Youtube channel appear below. Most of these were an experiment in the pandemic so there's lots of room for growth. I'm hoping to improve and make more in the future. Not only videos to help students but also some research videos!


Solving independent set on a bipartite graph using flows.

Data Programming

Learning to use Pandas by analyzing NBA stats.

Teaching Journey

The people who most shaped my teaching style are Jeff Erickson, Andreas Kloeckner, Charles Carleson, and Richard Buckland. I'm extremely grateful that I had the opportunity to learn from these amazing people and now get to use their approaches and build on them in my own teaching. What follows is an explanation of some of my approaches to teaching developed through my influences, experience, as well as my own personality and why I think they work. This is presented both to give a better idea of my personality and thought processes as well as facilitate discussion of possible teaching practices to improve student experiences. My desire is to make learning a fun experience that brings out the deepest curiosity and creativity of my students.

Before even attempting to explain concepts well, I find creating a great learning environment is critical. For me, a great learning environment is one in which students are comfortable and engaged. The main goal is to keep students' attention and have them actively participate. Part of the equation is being friendly and interested in the students so they feel comfortable participating. I picture this process like a comedian talking to the crowd at the beginning of a show and adapting the jokes somewhat to the audience to maximize engagement.

Another part of the equation is directing students' curiosity effectively. Typically, the more enthusiastic and outgoing I am during a session, the more likely the students will participate and share that same enthusiasm. I genuinely am fascinated with all the subjects I teach and this tends to rub off on the students as well. Also, framing the material to be more relatable through real life examples or popular media is helpful to hook student curiosity. Generally, I approach a lecture or problem solving session like a theater performance and the goal is to leave the audience wanting more, in this case, learning.

Then, to convey topics well one of my main tools is recontextualizing such as by making the abstract concrete or vice versa. In my experience (as both a student and teacher), students can usually solve a problem when phrased in the right terms, typically something they are more familiar with. My go to is to translate problems and algorithms into real life problems and processes that can be acted out or visualized. Not only does this approach allow students to think about problems in a space they are more familiar with to ease some barriers of finding solutions, but it also adds elements of kinesthetic and visual learning to maximize the brains learning potential.

These ideas mostly refers to algorithms courses but applies to other topics. For AI classes, I use a similar approach but use examples from psychology or have students do thought experiments of how they or others would learn instead of visualizing a physical process (unless it's about maze solvers!). Of Course, all of these techniques are my current approaches and will likely change overtime with more experience! I'm always open to new teaching techniques and learning more about, well, learning.

Lecture Notes

Coming Soon!