Teaching Philosophy

Over the past 17 years, I have witnessed the expanse of Computer Science as a discipline, from its mathematical foundations to computer architecture to software development. Increasingly, Computer Science has also become a foundation for many other concentrations–a trend I have experienced at the University of Virginia while working with humanities scholars turning toward Computer Science techniques, such as social network analysis, text mining, and machine learning to aid their research efforts. By connecting with and engaging students from diverse backgrounds who have an interest in Computer Science in particular, or its application to another field more generally, I believe we can foster a more well-rounded computing society. Therefore, my goals in student learning are to invest, extend, and engage: I am committed to investing in and mentoring my students of all backgrounds so that they will invest in learning, extend their knowledge, and engage this new knowledge by applying it to their interests and passions. Over the past two years as a faculty member in the Computer Science department, I have grown to see a fourth dimension to teaching: expanding this investment in students to scale in larger class environments.

In order to invest in students, I believe that the best way to fully engage them is to consider the learning process as a mentor-ship, both inside and outside the classroom. In the classroom, this entails being real and honest in connecting with students, getting to know students, taking the time to thoughtfully answer questions, and working their interests into the lecture material. At the beginning of each semester, I poll my students to find the best time to hold office hours, so that I can be most available to them. I also use that information to guide the scheduling of TA office hours to ensure that students can get the one-on-one attention they need throughout the semester. Both inside and outside the classroom, I use real-life examples and share some of my personal stories and struggles, in order to build a rapport with the students so that they feel comfortable talking about larger life questions as well as the course assignments. My students have thanked me for sharing and showing them that even professors are human. This promotes a more holistic approach to learning and a fostering of intellectual curiosities in the field.

A core part of student growth, and my second goal for student learning, is extending their current knowledge of the subject. I want my students to leave any course with a core knowledge about the topics covered that can be built upon for further work in CS or that gives them useful and relevant tools to apply to their primary or future fields of study. In a typical Algorithms course such as CS4102, this includes the theoretical background, implementation skills, and use of common data structures. In addition, by structuring the course around a collaborative problem-solving environment, it also includes practical life skills such as teamwork and time management.

To assess acquisition of this knowledge, I believe that the best method is through the use of a constant feedback loop. In the classroom this can take the form of a thumbs-up or thumbs-down quick check after introducing a new topic, or a short recap of the material covered the previous day followed by a few moments for questions in small- to moderate-sized classes. In larger classes a brief, potentially anonymous, interactive poll is helpful. By gaining quick real-time feedback, I can tailor both the lecture and upcoming homework assignments to the needs of the students. While this more immediate feedback is useful in determining the aggregate progress of the course, regular homeworks and tests are still used to measure individual student progress.

Finally, my major goal in student learning is to encourage students to engage their passions within the field. Since I believe that students themselves play the largest role in their learning process, their interests and backgrounds should shape the direction of course examples. To achieve this goal, I intentionally include flexibility courses, encouraging students to incorporate their own interests, disciplines, and concentration choice into their work. This process celebrates the diversity of the students in the classroom by connecting the material directly to their backgrounds and interests. For example, when designing my Web Development course at ECPI College of Technology, instead of following the course’s traditional “example company”-based material, I encouraged students to choose their own topics. Throughout the course, grounded in their choice, they learned HTML and best practices in web design, ultimately building a larger class project website. One veteran, engrossed in his project because of his topic (guitars), put in extra effort on his website and ultimately incorporated more than the project itself required. In UVA’s Algorithms course, I have built this flexibility into semester-long extra credit opportunities, encouraging students to connect with the course material in new and interesting ways as well as sharing interesting stories of algorithms at work in their lives. Students best learn when they are engaging their passions at the same time they are conquering a new task.

By engaging students from a wide variety of backgrounds, connecting their passions to the course material, and mentoring them beyond the classroom, I believe students bring more of themselves to the subject and through that process succeed, not only as Computer Scientists, but also as Engineers, Mathematicians, and Digital Humanists. They will experience the vastness of the Computer Science field as well as its ever-increasing application domains, embodying the philosophy that “computer science is no more about computers than astronomy is about telescopes.”

This tailored engagement becomes more difficult as we scale our courses to meet an increasing enrollment in Computer Science courses. I have worked to facilitate and maintain a high level of engagement with students even as the number of students in my courses increases. An integral part of CS 2110 Software Development Methods is in-class activities, where students worked with their peers to better understand the material discussed during class. During my first semester teaching the course, I realized both the importance of the activities and also the burden on the graders, and created a series of scripts that completely automated the grading process. This allowed the TAs to spend more time with the students while also verifying student effort in the daily activities. I also helped transition the CS 2110 course to online exams; after a trial-and-error first attempt in Fall 2018, I wrote a web-based testing platform to provide students with a familiar syntax-highlighted environment outside of their IDE. Students could then take multiple-choice and fill-in-the-blank questions on UVA’s Collab platform and transition to this platform for coding questions. The overall process shortened our exam grading time dramatically, providing quicker response time to students and allowing TAs and instructors to engage more with the students. I believe that we must continue investing in scalable measures that continue to support and encourage student engagement with instructors and course staff.