My philosophy on teaching methods
Computational social science skills are increasingly salient not only in academia, data science, or machine learning engineering, but many careers that social science undergraduates might want to pursue. Getting students programing quickly so that they can start applying these methods to social science is extremely important. But I also subscribe to the “teach a man to fish” aphorism, and believe equipping students for long-term success requires cultivating both applied chops and intuition for how algorithms work. Unfortunately, courses of this nature often remain locked away in fast-paced CS/Stats departments that exclude or discourage the many curious social scientists without the prerequisite math skills. When I started graduate schools, I was one of these students.
As a teacher, my goal is to create a warm, inclusive environment where students have the space, time, and support they need to take risks, ask questions, and build mathematical intuition for algorithms at their own pace. It’s my job to listen to and observe my students so that I can identify that pace and create that environment. Given these resources, I truly believe anybody can develop the familiarity with math notation and basic probability to understand how machine learning, network, and causal inference approaches work under the hood.
Working through proofs is not an efficient way to learn machine learning starting from math basics. When teaching, I try to blend loss functions with other modalities of explanation: cartoons of how algorithms work, model architectures, pseudocode, scripts, and pen-and-paper activities. For example, in a class (or classes) on decision trees, I start students with some example cases in academic papers or policy where these algorithms have been applied. I then walk visually through how data are sorted in the tree. Next, we learn to calculate Gini impurity together as a classification loss. Finally, we do a group activity where students manually compute losses and classify M&Ms in a two-layer tree.
I’ll conclude by saying I don’t want to diminish providing hands-on coding experience with real data. Teaching students how to code is the final ingredient they need to concretize the scientific research skills I hope to impart (described above) and apply their technical knowledge (described here). To be frank, it’s what most students want out of the class. My courses differ from CS courses in that I don’t ask students to implement algorithms. Instead, I provide them with extensive example code notebooks and online resources, and ask them to extract social scientific insights from novel datasets by applying these methods.