I find I am most effective as a teacher when sharing my enthusiasm for computer science. Computer science brings the principles of critical thinking and ingenuity to the forefront, as there is rarely one best solution to a given problem. It allows for the direct exploration of many other fields, such as cellular processes in biology, friendship and interaction in social networks, or even logical frameworks for metaphysics in philosophy. By teaching computer science at a liberal arts institution, I hope to inspire the next generation of scholars and teachers.
At UW-Madison, my teaching assignments have been varied and rewarding. I began as a discussion leader for two sections of CS 132 - Introduction to Computers, helping non-technical students learn to use Excel, Access, Word and PowerPoint. While preparing handouts and working examples for my students, I learned the value of clarity and simplicity when explaining computer science to an outside audience. I found I enjoyed answering questions during office hours and providing guidance for these students as they navigated through unfamiliar territory.
CS 302 - Introduction to Programming in Java presented my next challenges as a teacher. Over two semesters I taught four stand-alone sections and lead one discussion section. Most of my students were freshmen, wide-eyed and ready to learn. While they stepped through loops and sentinels, I learned about how to plan exciting lectures and reinforce key concepts. I encouraged outside exploration through examples such as DNA string matching, fractal iteration and artificial intelligence. My students consistently rated me with highest marks in both enthusiasm and overall recommendation, and in 2000 I was awarded the Outstanding Graduate Student Instructor in the UW CS Department. I have been very proud to see many of my students continue their coursework in other computer science courses and for some to eventually graduate as CS majors.
A majority of my teaching experience was with CS 540 - Introduction to Artificial Intelligence, where I was a teaching assistant for three semesters and was the sole instructor for the summer session in 2001. Working with Professors Jude Shavlik, Jim Gast and Gerson Zaverucha, I developed homeworks, lead discussion sections and gave guest lectures when the professor was unavailable. As instructor in the summer, I organized the syllabus, created exams and lectured five times a week for eight weeks. The junior and senior level undergraduate students inspired me, as they had conquered the basics and were ready for more. Through holding many office hours, I gained a deeper understanding of the material than before, as each student had different strengths and weaknesses which needed to be addressed.
For these last two classes, I developed the following course homepages, where you can find copies of my syllabi, homework assignments and exams.
- CS 540 - Introduction to Artificial Intelligence (Summer 2001)
- CS 302 - Introduction to Computer Science (Spring 2001)
- CS 302 - Introduction to Computer Science (Spring 2000)
I believe the classroom should have a collaborative atmosphere between instructors and students. When teaching, I prefer to write on the chalkboard, and reserve PowerPoint slides for more intricate demonstrations. This creates a dynamic atmosphere where the students become actively involved in the lecture, as their questions and participation will influence the direction of my examples and focus. I also encourage students to take their own notes, so as to engage them in learning through personally visualizing, discussing and recording each concept. In class, I have students work in groups with their peers on small practice problems. This builds on the collaborative atmosphere and tests students understanding of the material through explaining it to each other. Student feedback should be incorporated as much as possible into daily lecture, so I make a point of starting each semester with a survey of my students' interests and background, and I following up on this feedback with midterm evaluations to make adjustments as needed.
A typical homework for my courses will include a section on working through a concept by hand, useful for understand the mechanics of an algorithm, followed by a programming section to put the algorithm into practice. For advanced classes, I like to incorporate an independent project, which allows students to delve into related topics of their interest and then present their findings to the rest of the class. I feel exams should rely less on memorization and more on application of the concepts to new problem settings to test their ability to transfer and abstract the course material.
I look forward to teaching introductory courses on programming, data structures and algorithms, along with more advanced computer science topics such as artificial intelligence, machine learning, databases, combinatorial optimization and bioinformatics, as well as courses in other related disciplines such as symbolic logic, numerical methods and discrete mathematics.
I am also very interested in teaching interdisciplinary courses. They are a great opportunity for computer scientists to explore applications of our research, as well as an entry point for students outside the field to find connections. I would be happy to participate in or create courses in this vein such as computational approaches to social science, philosophy and ethics of computer science, cognitive science and game theory and design.
