Over the past few years, I have reviewed many a teaching philosophy statement as part of the hiring process for new faculty candidates. Most of these statements articulate a clear overall philosophy toward teaching. However, they tend to lack a practical explanation of how to apply that philosophy in a potentially resource- or time-constrained environment, or how to adapt that philosophy depending on the subject matter of the course or the specific set of strengths of the students.
The ability to mold my teaching to students at different educational levels and from varied backgrounds, as well as rapidly adapting to the pandemic classroom, has in large part defined my first several years of classroom teaching. The only shared characteristic of my courses is that they all have had enrollments in the 25-50 range.
This is not to say that I do not have unifying principles that I apply. All my courses have an attendance policy, with most of my students achieving perfect attendance despite having the option to miss a few classes. Furthermore, I do not permit phones or laptops in my classrooms unless we are working on pair programming or a code-along, as described below. An important complement of these policies is ensuring that students understand that their attendance is clearly tied to their success in the course, which I reinforce by instituting an active learning classroom across all my teaching.
The active learning classroom is one in which the professor fosters students to construct as much understanding of the material on their own as possible, rather than conveying the material through a lecture in which most students rarely participate (and many do not attend). The active learning classroom is empirically superior to a traditional lecture; Freeman et al. 2014 performed a meta-analysis of other studies and concluded that active learning on average will boost student performance by half a standard deviation, and it reduces failure/drop-out rates by 50%.
In much of what follows, I will describe the specific courses that I have taught, all of which I developed, co-developed, or completely overhauled. Where applicable, I will mention how I implemented active learning as well as how I have worked to master teaching each course. As evidence of the success of my approaches, I would appeal to my teaching evaluations, which are superlative for all of my courses, as well as the fact that I have been twice nominated for a Carnegie Mellon teaching innovation award (for Fundamentals of Bioinformatics and Precollege Program in Computational Biology) and that in 2022, I won the Herbert A. Simon Award for Teaching Excellence in Computer Science (for Great Ideas in Computational Biology).
Before delving into the specifics of individual courses that I have taught, I would like to point out one additional lesson that I have learned that is critically important to success as a teacher. The following is sampled from the reflection on teaching that I was asked to write as as part of receiving the Simon Award (the full reflection is provided as an appendix).
When asked what they considered to be the secret to a happy marriage, John and Fiona Prine both answered, “vulnerability”. And if I were asked what my secret to a happy teaching career is, then I would give the same answer. There is a stigma that professors are supposed to be solemn, opaque, and miserable. Many professors – none at CMU, of course – pass through their entire careers embodying this stereotype as a defense mechanism. When I started my career as a professor, I projected the same defense, and then one day I decided to be myself in front of my students. It felt like I had discovered a buried treasure, because I had.
After all, when I read what some of my nominees wrote, I was surprised that they hardly mentioned my teaching. They wrote that I’m nice (debatable), that I care deeply about them (definitely true), that I cut them some slack at a difficult time, that I turned over my closet and taught online in wacky outfits when we were all forced into our homes because of a pandemic. The simple fact is that compared to cleaning up a five-year-old and getting him into fresh clothes – [the work of real teachers] – this is all easy stuff.
We professors know that our students are just like us, but I don’t think that many of our students know that we are just like them. If we can find a way to show them even just a bit of our own souls, then it makes us a little more complete. And who knows, we just might inspire them to teach.
In spring 2019, Carl Kingsford and I designed and taught 02-251 (Great Ideas in Computational Biology), a course showing first-year School of Computer Science undergraduates the big ideas that have made biology a computational discipline. These ideas are beautiful but can be advanced, and where a similar course is taught at other universities, it is offered as an advanced elective to upper-class students (many of these analogous courses have adopted my Bioinformatics Algorithms textbook with Pavel Pevzner). The challenge, then, is to communicate these ideas to first-year undergraduates in a way that prevents overwhelming or overworking them.
I have taught the course solo for the past three years, and in that time, I have made significant changes to the curriculum, based on input from both Computational Biology Department faculty and former students. The course operates on a lecture format, but to facilitate active learning, I ensure that each lecture has three or four moments in which students are required to complete an exercise, often working with a teammate. To further ensure that students work together where possible, I have changed some homework assignments to be group-based and replaced a final exam with a final project that students can choose to complete in a group. With the rise of the COVID-19 pandemic, I developed a collection of SARS-CoV-2 Software Assignments showing students how the ideas they learn about in the course are integrated into real software that we can apply to SARS-CoV-2 genome datasets.
I am also proud of measures I have taken to adapt the course to an online environment as the result of the pandemic. In spring 2020, when our course was taken suddenly online, I wanted to find a way to lighten the mood at a time in which students were understandably distressed. I rummaged through my closet to construct crazy outfits for each day, from “Joe Exotic” to “enthusiastic Spring Break 2020 attendee”. In spring 2021, to fight the general sense of apathy that many students were facing, I implemented a bounty system in which various aspects of student attendance and participation would be rewarded with personal donations to charity, much like a British boarding school’s points system. I wrote further about these efforts in “Incentivizing Course Participation with Charity Contributions” and was pleased that participation skyrocketed, the chat was very lively, and we were able to donate $442 to the wonderful Every1online project, which my students chose as our partner charity.
02-601 (Programming for Scientists) is a course designed for first-semester MS students that I inherited from Carl Kingsford and have taught since fall 2015. Since that time, I have made three significant major changes to the course.
First, I have reworked the course structure to include a great deal more scientific content. Specifically, each module of the course centers on a single scientific inquiry, from finding replication origins in a bacterial genome, to building a gravity simulator, to constructing evolutionary trees of coronaviruses, to implementing a self-replicating cellular automaton, to simulating a presidential election from polling data. The scientific problem is presented upfront, which motivates a transition to a topic in programming that is required to answer this problem, and then the course centers on applying this topic to build and analyze the required scientific model.
Second, although the course has short lectures to motivate material, most time in classes and recitations is devoted to active learning via code-alongs and pair programming. In the former, students type along following the instructor’s lead as we demonstrate a programming topic. In the latter, students are tasked with working with a partner in order to take the next steps or apply what they have learned via an exercise.
Third, I have noticed in teaching the course that students who have not previously programmed tend to struggle the most with the course’s first month of content. After a challenging first month, many of these students are indistinguishable from others when we cover more advanced topics. To allow a more gradual on-ramp, I now make the first month of the course a required prerequisite, and I have transitioned this material (contained as part of the Programming for Lovers project) into an online bootcamp that students complete with guided help from teaching assistants in the summer before they begin at Carnegie Mellon. This has the added benefit of freeing course time that can be devoted to code-alongs and pair programming exercises, as well as allowing the course to delve deeper into intermediate topics, with a focus on dynamic programming, distributed computing, assembly language, and an introduction to data structures. I will be making these materials open to the community with the hope that they can be adopted widely in the coming years.
02-000 (PreCollege Program in Computational Biology) is a three-week full-time high school program that I developed with Josh Kangas. Each morning, students spend four hours with me learning how to implement fundamental algorithms for the analysis of biological data that they generate in the laboratory during afternoon sessions with Josh. Much of this data is based on a DNA study of the microbes living in Pittsburgh’s three rivers, and so students spend a day at the start of the program touring 40 miles of the rivers and sampling river water on a state-of-the-art vessel operated by local charity Rivers of Steel.
Before teaching this course the first time, I thought that students might tire of such a lengthy lesson, and yet I have found the challenge to be quite the opposite. The students are immensely energetic and have no problem enduring a four-hour session with just a single ten-minute break. Even after another four-hour laboratory session in the afternoon, they are brimming with enthusiasm.
Like Programming for Scientists, the coding component of our precollege program operates based on code-alongs and exercises. However, I have noticed that this group of students tends to be hyper-social, much more even than undergraduates, and so I have changed the course to have far more exercises than code-alongs, in which students work in groups of 4 or 5 to solve and debug problems together with roaming TA and instructor support. It is utterly astounding to me that students are able to write dozens of lines of code together with minimal instructor input amounting to fundamental algorithms that are included in papers with thousands of citations and were, at one time, at the frontier of computational biology research.
The heavily active learning structure of this coding component allowed the precollege program to adapt seamlessly to an online environment in 2020 and 2021 due to the COVID-19 pandemic. In fact, we were one of only three programs to run in 2020, and we did so at a significant surplus due to the ability to scale our program beyond physical limitations of classroom space.
02-602 (Professional Issues in Computational Biology) is a course I taught from fall 2015 to fall 2020 with three co-instructors: Shoba Subramanian, DJ Brasier, and Stephanie Wong-Noonan. Over that time, I worked to transition this course from a weekly seminar into a completely flipped intensive skills development course in which students learn how to form their professional skills outside of class, which frees in-class time for peer- and instructor-reviews of student demonstrations of their professional skills via resumes, cover letters, elevator pitches, mock presentations, and mock interviews.
Students present their resumes and introduce themselves to a hypothetical employer, explain how they would navigate a crisis in a work environment, deliver a short presentation on a technical topic, and go through several rounds of mock interviews, all while getting instant peer and instructor feedback on their work. One of my proudest moments as a teacher was having a student tell me that they had received an internship at Illumina (a company receiving over 10,000 applications annually for fewer than 100 internships) in large part because they had aced a short presentation as part of the interview, and that it was due to the guided practice that they received in this course.
The course does not have faculty course evaluations, but below, I am providing some comments from five different students as part of their final reflections in the course from fall 2020.
I believe that this class was one of the most useful classes that could have been offered to first year students in the program. Coming into the program, one of my biggest worries was how I could focus on both my coursework and my internship/job search at the same time. Creating the latter into a course itself made it much easier for me to concentrate on this aspect. I learned many useful skills from this class, from having a complete resume, to writing a cover letter and preparing for interviews. On top of that, this class forced me to recognize the many resources the Carnegie Mellon has to offer, such as the career center, and take use of them. Now, I feel as though I always have wonderful people that are willing to help me get to where I want to be in my career path.
Not only did this course benefit my professional skills, the adaptiveness shown to teach the course asynchronously was a marvel. Giving advice and allowing us to view other answers was a great way to provide feedback. Viewing other responses allowed me to look at ways I could better myself.
This course has provided me with some very valuable information that will surely help me in my future career. I am sure that everyone else is just as appreciative as I am. Thank y’all for including this class in the curriculum and thank y’all for putting this much effort and care into it!
The peer review system was of great use to me for all of the deliverables since I had access to a pool of 20+ students to examine what other successful assignments looked like so I could implement corresponding changes to my own work, while also being able to help out my peers where I felt they had some weaknesses. At the same time, the constructive feedback from other students and expert instructors has helped me improve in areas where I thought I had maximized my ability in reflecting on my skills/experiences.
I have gained a lot of insights from this course which I’m going to find immensely useful going forward. I now have better awareness of how to go about the job application process and the main strategies I will need. I am also more aware of the need to stay up-to-date on LinkedIn and maintain professional networks, and how to communicate professionally and engage constructively with the content on the platform. I consider these to be life skills, as I will continue needing these at every stage of my career. I am confident that I now have a good sense of the know-how and can project myself confidently to smartly leverage opportunities.
02-680 (Essential Mathematics and Statistics) is a course for first-semester MS students that I co-developed in fall 2019 with Seyoung Kim. I proposed the development of this course after noticing that our MS students were poorly prepared quantitatively to take a machine learning course. The course’s first half explains introductory topics in proof techniques, logic, linear algebra, and discrete mathematics, before transitioning to an intensive introduction to probability and statistics in the second half; I developed the first half of the course.
The course is unique in that it introduces mathematical concepts from the ground up within the context of biological applications. For example, I motivated logic via neural networks and proof by induction from within the context of evolutionary tree algorithms.
Unfortunately, my teaching schedule has not allowed me to teach the course since its introduction. However, I am exploring the creation of an online course and accompanying textbook that would provide this material to the public for free.
I have spent an enormous time on building active learning into my classes wherever possible, but the largest such effort is the flipped class that powers 02-604 (Fundamentals of Bioinformatics), a course that I designed for second-semester MS students in computational biology and have taught since spring 2016. I was a finalist for a Teaching Innovation Award at CMU for my work in this course, and in 2018, I was invited to deliver a keynote talk at the meeting of the Community of Special Interest in Education at the 26th Conference on Intelligent Systems in Computational Biology (ISMB), the largest annual conference for computational biology worldwide. This talk led to the publication of an education article in PLOS Computational Biology about my experience in teaching the course, where I discuss some of the challenges that I encountered and how I responded to these challenges.
As mentioned previously, in a flipped class, students complete outside of the classroom what would normally be covered in a lecture, freeing class time for assessments that test and deepen their understanding of what they learned outside of class. I appreciate the definition of a flipped class proposed by Bishop and Verleger in 2013, in which the pre-class learning must be automated. This definition therefore would exclude course structures like the one I have described in 02-602, in which students simply read an article or watch a lecture video before class (although I have still found such a structure to be useful).
Requiring the flipped classroom to incorporate automation in its activities outside the classroom also helps indicate the clear bottleneck in implementing successful flipped classes. Fortunately, in the case of Fundamentals of Bioinformatics, I built (with Pavel Pevzner) an interactive online textbook as part of the Bioinformatics Algorithms project. This online textbook, which also powers our specialization on Coursera, has served as the automation vehicle for Fundamentals of Bioinformatics for the past several years.
A reasonable model for flipping a course is to have students complete a module of material outside of class, and then use a weekly class meeting to discuss this material as well as solve some additional exercises derived from the material. Yet in teaching Fundamentals of Bioinformatics for several years, I have learned that this approach is flawed; although high quality automated learning materials are vital to student success outside of the course, a more careful design of the in-class modules is just as important. I have spent the past few years designing these in-class modules to best serve my students, and I will describe that design in what follows.
Each week in Fundamentals of Bioinformatics, students complete a module of the interactive text, logging every remaining question or concern that they have (they are required to ask at least five questions). Students must submit this work the evening before the in-class session, at which point I work with my teaching assistants to consolidate all student questions. The two-hour in-class session then comprises the following five components of approximately equal length.
We typically then will take a five-minute break to prevent student fatigue. For the remaining three components of the class, students are divided into “pods” of 4-5 students — perhaps the ideal group size for problem-solving according to Hackman and Vidar 1970 — and one favored by the Navy SEALS and our PreCollege Program. I then rove and meet with groups as questions arise. After each component, we have a group discussion in which I again serve as a sounding board for students, capturing answers from them and asking them additional probing questions.
In particular, the relatively recent inclusion of component 5 is one of which I am very proud. It allows me to demonstrate that the course is not a series of unconnected topics arising from the ether, but a chain of key ideas that can be threaded together into one overarching narrative with a single theme. Component 5 also moves the course beyond active learning into a different paradigm called discovery learning, in which students are not just recipients of knowledge but rather the constructors of it.
In this statement, I have worked to convey my teaching philosophy, how that philosophy has evolved over my career thus far, and how I have refined my teaching for a variety of different courses to students of varying backgrounds. Although I have had success as an educator and have enjoyed immensely rewarding experiences in and out of the classroom working with students, I feel that I can continue to improve my abilities as a teacher.
For example, in one of my MBA courses, I am learning about how to structure presentations for different audiences, and I am looking forward to apply what I have learned and further improve my teaching.
I also plan to grow my teaching presence online, and disseminating the Programming for Lovers project over the next few years will require an intimate knowledge of best practices for teaching via recordings. I have experimented with this medium before, and I feel that I have better camera skills than most professors, but the rise of streamer culture provides us with a wealth of content to explore when it comes to finding ways to engage a wide array of learners online.
Finally, although the COVID-19 pandemic was at times frustrating, it also provided a couple of wonderful emergent classroom behaviors. First, shy students were much more willing to ask questions because they could ask them via private chat. Second, the public chat was often extremely lively (especially when teaching high school students and first-year undergraduates), which allowed students to converse with each other in a stress-free way while they were learning. Third, conducting a short exercise or a class question via a poll allows for an instructor to know exactly what students are learning in real-time. As we have returned to in-person teaching, all three of these features are difficult to port back to campuses without also allowing for distractions. With this in mind, I look forward to finding ways to let our pandemic teaching inform making our in-person teaching that much better.