**Current courses**

**First Year**

I've been teaching CMPT 111 for several years, and I have devoted a lot of time to developing tricks and techniques to explain basic computational concepts. In 2009 Daniel Neilson convinced me to take the step to a flipped classroom, and we haven't looked back. Heroically, Dan began authoring a sequence of readings which we have turned into a kind of textbook which we still use in CMPT 111. I decided to get the full first year experience, and started teaching CMPT 115 in 2013.

**Artificial Intelligence**

When I first started teaching, I did the usual thing and taught in my area of research. I developed course notes for CMPT 317 and CMPT 417 based on my own experience, and of course, the AIMA textbook, which we still use. I've taught CMPT 317 (Intro to AI) as well as CMPT 417 (Knowledge Representation and Reasoning).

**Programming Languages**

As a graduate student under David Poole, it was almost necessary to become fluent in Prolog. I say almost, because it could have been done without Prolog, but it would have been a lost opportunity. David is the best Prolog programmer I know personally, and I often spent hours deciphering his code. I learned a lot. Back in those days, I was also a teaching assistant for a first-year course at UBC that used Scheme as the programming language. Teaching functional programming to first year students was a pretty forward-looking strategy. In my ealry years of teaching at first level, I was convinced that there is no universally best language for teaching basic concepts, and that the teacher has more of an impact than any language choice. As I explain below, I've changed my mind a bit.

In any case, I taught CMPT 340 for several year by introducing students to Prolog and Haskell (a modern relative of Scheme). I think the current instructors are still using some of my notes (so you can blame me for all the problems).

**Recognition**

I am pleased that students seem to appreciate my teaching efforts. As a teacher, one often tries very hard to make an impression, but the impression is somehow lost. I've had the opportunity to practice some of my tricks and techniques. I also take feedback from students fairly seriously, so if you have something to say about how I can improve the learning experience of my students, I want to hear it.

In the past few years, students have consistently rated my teaching quite highly. As a result, I have received a number of departmental teaching awards, and my colleagues recently nominated me for a university teaching award. I am honoured (and frankly, a little surprised) to have won the "2014 Provost's College Outstanding Teaching Award for the Division of Science."

**Curriculum development**

I am currently engaged with substantial revisions to our first year curriculum. About a decade ago, my department made a decision to teach the fundamental concepts of first year computer science using a computer language called “C++”. During my years of teaching those courses, my attitude towards this approach to first year changed substantially. At the outset, I believed that the concepts could be taught using any language. After I had taught the second half of our first year a couple of times, my opinion changed radically. By quantitative analysis of student outcomes, I was able to show that students understood the concepts being taught quite well, but struggled with the hostility of the implementation of these concepts in C++.

The direction of our revisions to the first year curriculum is consistent with the assertion that computer science is essential to modern literacy. Topics that are useful for general application to any field are being brought into first year from more advanced courses; concepts that currently challenge students at the first year level are being pushed back into second year. Most of the fundamental computer science concepts will be taught using a language that novices demonstrably learn more easily, and which is currently used in industry by software developers, in science by scientists, and in many other fields.

**Blog**

I've got some stuff on my blog (Compute This!) that might be interesting if you're wondering about what Computer Science is. I've got other stuff there as well, e.g., a tutorial on recursion, and in the works, an informal tutorial on algorithm analysis.