Over the course of the past 12 years, I've had the opportunity to be the TA or Instructor in 12 classrooms and interacted with many more students outside the classroom. I've worked with students from kindergarten through graduate school, in subjects from basic counting through complex ethical dilemmas, like net neutrality.
The different classes, in some ways dictated my interaction with students. The classes at Berea College were all run like labs and I spent significant time helping students troubleshoot programming. Other classes, like CSCI 5115, I spent most of my contact with students meeting with project groups and helping guide them through the course. But perhaps more than anything, I love working with students in the introductory computer science courses. Many of these students were taking the course because it met a quantitative reasoning requirement. It got them out of taking calculus. These students often entered the classroom scared, but left confident in new skills and expanded opportunities.
Course I've Co-instructed:
Courses I've TAed before include:
UMN SENG 5115: Graphical User Interface Design and Evaluation (41 students)
UMN CSCI 5115: UI Design, Implementation, & Evaluation (~50 students)
UMN CSCI 1001: Overview of Computer Science (~60 students)
UMN CSCI 1902: Structure of Computer Programming II (93 students)
Berea CSC 320: Algorithms, Objects & Data Abstractions (7 students)
Berea CSC 205: Introduction to Computer Science (~20, ~20 students)
Berea MAT 225: Calculus II (~30 students)
As part of the Preparing Future Faculty program at UMN, I designed a course to be taught during a one-month interim semester. The goal was to co-teach the course with a history professor at Berea College.
Course I designed:
Throughout the fourteen years I've been involved in higher education, the classes that I've been in have formed me and my ideas about teaching. I've sat in discussions with only three other students as well as lecture halls with over 100 classmates. This, combined with my experience in front of the classroom, has formed many of my thoughts and opinions about teaching and learning. Below I've focused on some of the elements that I believe are most crucial in a computer science classroom: individualized attention, good communication, coverage of computer science essentials, and diversity. I've also included student evaluations to show how I've applied these in my past teaching. As I continue through my career, I expect that these will shift and change as I gain experience, informed by my time in, and out, of the classroom. But for now, this is my teaching philosophy.
I believe in treating students as the individuals they are. By getting to know my students, I can ensure that there are points in labs or homework that everyone can reach, but that there are also additional ideas and questions following so that motivated students can be challenged. In the classroom, I find that if I know my students well I can also realize when concepts aren't being understood (even before the first hand pops up). Once I start seeing looks of confusion, I can change tactics and try explaining something in a different way that may be more easily understood. For example, theoretical explanations of how an algorithm work may not resonate with many students, but walking through the algorithm will give students a much firmer understanding of what is happening.
While I prefer teaching interactively, when I do lecture, I try to break the material into small segments, inviting discussion and small group breakouts throughout to keep students engaged in the material. Small class size definitely helps students become more comfortable in discussions and form bonds within the classroom which often helps the students form a cohort, a support group for their degree program. By working with students closely, I can also provide them with input early and often, helping ensure that students aren't heading down the wrong path and helping to build their confidence. While this additional guidance isn't always necessary, I find that often students can benefit from this advice.
That said, some students don't always follow the right path. Multiple times during my time at UMN as a TA or instructor, I discovered students cheating. I also had students skip classes, fail exams, and sit in my lectures wearing headphones. Everything got resolved. Sometimes I could save the student from failing the class or dropping out, but other times I could not. All of it involved talking with the student and better trying to understand them as individuals, not just as a face in the crowd.
I feel that as an educator there is no upper limit to my communication skills and no point at which I can rest easy. I strive to provide all my students with timely, actionable feedback. This attention to communication means that I invest a significant portion of my time in reading, reviewing, and responding to assignments, projects, and emails. While it is often frustrating to realize that students aren't comprehending something or that they're starting the two week long assignment the day before the deadline, I try to also use that as a reminder that I need to be paying more attention or striving harder to drive points home.
I have also learned that sometimes the tried and true methods don't work. The textbook examples fall flat on their face in the classroom and blank stares follow me around the room. This is something that I try to look at as an opportunity. Sometimes I have to come up with better examples, ideas that resonate with my students, not just any student.
Much of what I've written about above is applicable regardless of the subject matter. However I do have strong opinions on what people graduating with degrees in computer science should learn based on my understanding of the discipline and experience in industry. Obviously programming, algorithms, data structures, and other typical courses should be taught, but I also believe that students should have a basic understanding of statistics and web design as well as the fundamentals of usability, the history of computing, and computing ethics. While it wouldn't be practical to add five courses to the degree program, many of these skills can, and should, be taught in context. Introductory courses are a great time to hook students with the history of computing and start discussions around ethics in the field. I've incorporated web design, usability, history of computing, and computing ethics into my introductory classes in the past and look forward to continuing that in the future.
In addition to these computer science skills, I believe that students should also have communication skills, the ability to work well in a team, and the skill to work with whatever materials and resources are provided to them. I believe that my work in the private sector has helped me understand what skills will help students succeed in the industry.
As I teach, I will try to improve based on student evaluations, both updating the classes and changing my teaching methods to try and meet the students' needs. I will also continue my participation in the Special Interest Group for Computer Science Education (SIGCSE) and will keep myself abreast of new technologies and ideas by remaining active in my research fields and organizations. I believe that collaboration is an important part of learning and seeing it in action is useful for students. I would welcome the opportunity to assist with undergraduate research projects.
Teaching is important to me because, while I believe many things can be learned independently, they are often able to be mastered in a much shorter time frame and to a greater level of mastery with a good teacher. I believe that a liberal arts community is conducive to student success and I would be honored to be a part of that.