Teaching

To skip directly to my class experience and example materials, click here; to skip to workshop-style content click here; for my mentoring experience click here.

Philosophy

When I was being trained in cognitive neuroscience, I was fascinated by the potential for computational methods to help us understand the link between the brain and behavior. However, I could never quite wrap my head around what these methods were doing. I pursued a degree in Electrical & Computer Engineering in part to build a strong background to understand these methods myself, but also to help train the next generation of computational cognitive neuroscientists in cutting-edge methods. My primary goal as an instructor is to make computational methods accessible, interesting, and applicable to young researchers across multiple disciplines. To that end I have taught engineering, psychology, and neuroscience students across levels of experience from high school to graduate school. In the classroom, I focus on using active learning tools to ensure students stay engaged, project-based assessment so that students get to see their knowledge in action, and team-based learning so that students can build experience in collaboration and communication. Outside of the classroom, I mentor students interested in computational neuroscience in active research projects, giving them a chance to experience research and find out if it’s for them. I help them build a strong background in both systems neuroscience and computational modeling, such that they are prepared to continue this work in the future and, if they choose not to, can become fluent in the language of computational neuroscience.

In pursuit of these teaching goals, I have taught a wide range of audiences, designing content applicable to each of their backgrounds and interests. I designed and taught the Cognitive Neuroscience Research Internship (CNRI)’s Introduction to Python course for several years, aimed at Psychology and Neuroscience undergraduate students with no prior programming or research experience. This included building a syllabus from scratch, developing lectures, creating homework and in-class group problems, and assessing final projects. I have taught conceptual classes on (behavioral) reinforcement learning and birdsong for that same program, primarily developing discussion questions to introduce students to the basics of these topics. These classes are both small, with 8-12 students per semester.

On the computational side, I have TAd for early-stage engineering, computer science, and statistics masters and PhD students in Vector Space Methods with Applications and Probabilistic Machine learning; for the latter I was awarded the ECE Outstanding Gradute TA Award. In these classes I was responsible for developing and grading homeworks & tests, creating discussion section problem sets, holding office hours, and resolving student questions on slack and in person. These classes were roughly 30 and 120 students, respectively.

Given my teaching and research experience, I am prepared to teach introductory psychology and systems neuroscience classes, introductory machine learning classes from both a statistical viewpoint and a more general computational viewpoint, statistical methods for psychology and neuroscience, advanced modeling for psychology and neuroscience, and general latent variable modeling. I have experience developing new, smaller classes from scratch in addition to adapting existing material for larger classes to match shifting student expectations and developments in academic literature. In each of these contexts, I prefer to have students learn from a mix of concrete lecture-based examples and group work in-class. I tend to rely on think-pair-share strategies, both for lecture sections and more general in-class group projects. Outside of class, I prefer more in-depth problem sets, with group discussion allowed (assuming proper credit is given for group work), and encouragement to attend office hours for additional explanations. I also prefer longer-timescale projects as measurements of understanding over in-class tests, to try to assess higher levels of Bloom’s taxonomy of understanding, but do like using shorter, lower-stakes in-class quizzes to asses foundational levels of understanding — which, in this modern age, does also (at least a little bit) hinder the illusion of learning via large language models.

With that being said, I am always open to learning and adjusting as the theory of pedagogy advances. I am actively looking for feedback from my peers, my mentors, and my mentees on what works and what doesn’t. Teaching is a conversation, and I will listen to help both myself and my students grow as much as possible in a safe and supportive environment. In classes I have frequent check-ins with my students (through one-on-one meetings in smaller settings, or short surveys in larget settings); in mentoring I check in weekly to ensure that my expectations and assigned work align with my students’ expectations. If you have any questions, tips, comments, etc. for me please reach out!

Classes

Please see below for my direct teaching/TA experience. As a broad summary: I have TA’d classes in the Electrical & Computer Engineering department at Duke that have focused on general methods in machine learning and probabilistic modeling, I have co-designed and co-taught a semester-long course on introductory Python for undergraduates with no prior coding experience for several years, taught several discussion-based classes centered around the neuroscience of learning for those same undergraduates, mentored 8 undergraduates through this program, in addition to two through the Pearson lab, and I have given informal workshops on topics in machine learning and statistical modeling for graduate students and postdocs in psychology and neuroscience.

Cognitive Neuroscience Research Internship (CNRI): Intro to Python (Duke)

The Cognitive Neuroscience Research Internship (CNRI) is a semester-long internship-style program designed to give undergraduates interested in psychology and neuroscience a doorway into research. We specifically seek out students with no prior experience in coding or research — students who would otherwise not have access to academic research — but who show active interest and engagement in learning about research. We pay students for their time in the internship, so that cost isn’t a barrier for entry, specifically wwith the goal of removing socioeconomic barriers to research. The whole goal is to make research accessible, which brings me to the structure of CNRI.

This program is split into 3 parts: a series of programming classes, a course on concepts in modern cognitive neuroscience, and a mentored research portion. Since these are students with no prior research experience, we want to help them begin building tools in fundamental areas that they will need for research in the future. In the programming portion, we begin from absolutely no knowledge, starting from variables and data types, building up to a simple working example of a psychology experiment in Psychopy. The main challenge with this course is that we only get them for one class a week, for 8-10 weeks, and they have to complete this project while doing the coursework for the rest of the program on top of their other coursework. We designed the course with these constraints in mind and are continually updating and refining based on our current cohort of students. Our current approach is that of a flipped classroom: we have them go through workbooks/sets of notes prior to class introducing the topics we’ll be discussing in person, then spend a bit of classtime reviewing/elaborating on those topics and the majority of time on groupwork applying the concepts from the notes. We’ve found this to be more effective in terms of retaining the material, and having concrete examples that we can all work through together has been more enjoyable and impactful for both the students and us, the instructors. For a recent iteration of our notes, homeworks, and notebooks, see below; for a description of the mentoring aspect of CNRI see here and for conceptual aspects of class see here. If you’d like to take a look at our resources, we have a recent version uploaded to GitHub at the link below:

CNRI Intro to Python Resources

Probabilistic Machine Learning (Duke, STA 561D/ECE 682D/COMPSCI 571D)

In Probabilistic Machine Learning, I acted as a TA in charge of organizing the other TAs: scheduling discussion sections and discussion section leaders and scheduling grading. I additionally held office hours and created homeworks & discussion sections. See below for the discussion sections workbooks that I created for the class. I was awarded the ECE outstanding graduate TA award for this class.

Google CoLab notebook on regression variants with cross-validation

R Markdown lab on estimating heterogeneous causal effects (download)

Vector Space Methods with Applications (Duke, ECE 586)

This course covered topics general theoretical concepts important for modern and traditional machine learning, including vector spaces and methods of optimization in vector spaces. As a TA, my responsibilities were grading, holding office hours, and running pre-exam review sections.

Workshops

Duke Institute for Brain Sciences (DIBS) Methods Meetings

In my time at Duke I have deeply enjoyed participating in DIBS Methods Meetings, a series of workshops centered around educating graduate students and postdocs in psychology and neuroscience about a variety of research methods. We lead an interactive workshop with code examples, then upload the content in the form of a blogpost to a website, so that anyone can access and use the materials we create. For a full archive of workshops, see our website here; for the specific workshops I have led, see assorted goods.

CNRI Conceptual Classes

A second aspect of CNRI is the concepts class. This is a survey course; it is a discussion-based format where students are tasked with reading a paper/specific parts of several papers on different topics each week. Prior to class, students submit discussion questions over slack based on their reading of the paper and a prompt that the presenter gives them ahead of time. During class, the presenter takes the beginning to offer additional context and background for the topic of the day, then spends the rest of class heading up a discussion of the work, in tandem with a discussion leader from the class. I find birdsong in general really interesting (as one would hope given that that’s been the focus of my PhD research) but had no idea people even used birds as a model system in neuroscience until arriving at Duke, so I have centered my discussion sections around the use of birds (zebra finch in particular) as a model system in neuroscience and their links to reinforcement learning, and self-motivated/guided learning more generall.

Mentoring

My philosophy on mentoring is that a good mentor-mentee relationship, like teaching, is a conversation. The difference being that in the mentoring relationship, you are able to give students additional one-on-one attention to really shape the experience in a positive way for both mentee and mentor. Much of my perspective and approach is based on materials from the entering mentoring workshop and my experience with undergraduate students from a wide range of backgrounds. When I start working with students, I sit down and have a conversation with them about what they are hoping to get from this mentorship and about what I hope to get from it, and more generally set expectations around communication, workload, and meetings, making sure to again meet them where they’re at. I typically tailor their workload to match their background, focusing on building background with the scientific concepts we’ll be exploring before diving into the computational tools that we’ll be using so that my mentees have context for why we’re performing our analyses, at a high level. Once we have that understanding, we can dive into deeper detail with the methods. Each meeting I make sure to check in with my students to make sure they are not overloaded, while still making sure that we’re doing the work that we need to get done. Overall, I want it to be a positive experience for us all, and the key to that is frequent and open communication.

This also means communicating when goals, experience, or interests are not aligned. There are many smart and talented people out there who just aren’t a match for the project or role. In those cases, I do my best to connect students with other individuals who may be better able to support them in their career or academic path. Ultimately, what I want for my students is for them to succeed in what success looks like for them, and I will be happy to support them how I can and point them in the direction of others who can support them better if that’s the best thing that I can do.

Pearson Lab

In the Pearson lab, I have had the pleasure of mentoring two very talented undergraduate students and working with them in collaboration with the Mooney lab on analyzing Dr. Jiaxuan Qi’s superb calcium imaging dataset. As this is a (relatively) niche subfield, we work with tools that are not commonly covered in undergraduate coursework. As a result, over the past two years I have worked with them to discuss the field of songbird vocal learning, the context for this project and the importance of the region we are studying, introduced them to analysis methods such as bootstrapping, partial cross-correlation, regularized regression, & principal component analysis, and built their familiarity with working with extremely large scientific datasets. We have weekly meetings to check in on their progress and regularly check in over slack in the meantime if any questions/issues arise. I think that they have grown a lot in their knowledge and I trust them with the analyses we are carrying out, and I am excited to see what they accomplish in the future!

CNRI

The third aspect of CNRI is the pair mentorship, during which pairs of students are partnered with a pair of graduate students to work on active projects in the graduate students’ labs. This is a more structured mentorship than in a typical lab setting, as again, these are students that specifically have no experience with research prior to this program, and as such the elements of mentoring mentioned in my philosophy have been vital in this setting; in particular, setting expectations and tailoring the experience, workload, and projects to the interests of my students. Over my time with CNRI I have mentored 8 students, primarily introducing them to common neuroscience analysis methods with the application of the zebra finch calcium imaging dataset. These students have gone from no prior background with computational tools or this area of expertise to putting together a final presentation with applications of computational methods to zebra finch song learning and, in more recent years, a fully developed poster. Working with CNRI has been incredibly rewarding — I have been able to connect my students with other labs that fit their interests better, and have written multiple letters of recommendation to support them as they continue along their research journeys.

*****
Computational neuroethologist from Berkeley, CA