Skip to: Site menu | Main content

Teaching Portfolio

Below, I have organized many of my teaching-related activities.

Courses: Primary Instructor

Here are some courses for which I was the primary instructor. (There's commentary because I enjoy discussing teaching far too much.)

CS1: Peer Instruction

From 2012 to 2015, I taught CS1 several times using Peer Instruction (PI), which involves asking students conceptual multiple-choice questions in-class and having them respond individually and discuss with peers. You can see my course offering at our Peer Instruction 4 CS website. It took ages to develop this course, as is the case for all PI courses. These courses went very well, and PI has changed my opinion of how to teach an engaging and effective CS1.

Systems Programming

In 2011, I taught a second-year systems programming course for the first time. I had learned about some new web tools for supporting student-authored questions, so I gave one a try. Students could log-in, ask new questions and answer peers' questions. ... meh, I dunno, students didn't exactly explode from an excess of interest, but they all carried through with it and gave me some great feedback for the future.

Cs for Engineers

In 2010, I was given APS105 at University of Toronto: a first-year CS course for engineering students. This was a remedial offering of the course, meaning that all of my students were unsuccessful in the course the previous semester.

Two things shaped this course offering. First, I knew I couldn't teach the course the same way as it was done last semester. Last semester was in no way ``wrong'', but (1) it didn't work for these folks, and (2) they'd probably be bored if we proceeded in the same way. Second, I read a SIGCSE paper about Peer Instruction (PI). At the time, I think that I thought that the method was compelling and that it had backing research. But truthfully, I went with it largely because it was ``not like last semester''.

It took some time for the students to buy-in, and really, who could blame them? They had every reason not to want to be there. But my analysis of the PI data showed that it had worked, at least in the short-term. I was very pleased with the effort put in by several of the students, who told me that they actually enjoyed programming this time. Considering that we very likely had harmful preconceptions polluting these students' minds, this was very encouraging for me. (In fact, I've since become quite interested in research into usage of PI in CS. The work from this course evolved into a conference presentation for Ed-Media 2010.) The original course webpage is available here.


In 2009, I taught CSC108 (CS1) at University of Toronto. This was a real treat: the class was small (50 students), I had lots of time to prepare, and I integrated clickers and class discussion as best as I knew how. I got to know some of the students quite well, and all of the course evaluations were more flattering than I deserve. Two of the assignments I developed for this class (Lazy Exams and Song Generator) have since evolved into conference presentations. The original course webpage is available here.


In 2008, I taught CSC148 (CS2) at University of Toronto. I thought CS2 was as good a time as any to introduce students to the logic of developing correct programs; in addition to our data structures book, I spent a few lectures on material from my Invariants text. We also used some cooperative learning activities during class; a lot of the students had a good time with it. I was able to focus even more on student engagement because the instructors before me really helped me lay out the course content. Fresh out of some education theory courses, I knew that I wanted to include a class participation component. I thought that I would be able to gauge this from a combination of classroom observations and student self-assessments. In retrospect, this gave me accurate information only for the very active and entirely passive students. For other students, I erred on the side of lenient when giving participation marks. The original course webpage is available here.

Database Management

In 2008, I taught a fifth semester database management course at Centennial College. We spent several weeks on the e-r model, relational algebra, and normalization, before spending the last quarter of the course on SQL. We used SQLite as the database engine: students did not have to worry about server setup or software installation. The course was available through Blackboard; the lecture notes have been extracted here.

Courses: Teaching in a Team


After teaching courses on my own for a few semesters (including CS1), teaching in a team provided an interesting contrast. I was fortunate to be able to teach CS1 with several experienced lecturers at University of Toronto in 2009, 2010, and 2011. With hundreds of students enrolled, I learned quite a bit about the challenges of large classes. Engaging a class of 110 students is far more challenging than engaging a class of 50, at least with the techniques I had developed to this point. Of the many benefits conferred by having a team of lecturers, the one that stands out most is the teaching support. I was able to discuss teaching strategies, assignments, test questions, and other course-related items with other instructors who were directly involved in the same course.

Sharing Ideas

I'm happy to share ideas that worked particularly well. (Sharing the rest is fun, too.) I have recently begun attending educational conferences and presenting some assignment ideas. I continue to learn quite a bit from SIGCSE Nifty Assignments, and am happy to have been part of the session in 2010 and 2012.