**Current courses**

**First Year**

I've been teaching at the first year level for many 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 116. When Mark Eramian, Jeff LOng and I revised the first year curriculum, we followed Dan's example and produced three similar collections of readings for the new courses (CMPT 140, 141, and 145).

**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).

The department created an undergraduate version CMPT 423 of the Machine Learning course available to graduate students, and I am taking the reins.

**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 early 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. Good evaluations are always nice. I've received recognition for my teaching from the students (Computer Science Students Society), my departmental colleagues, and the university in the form of the 2014 Provost's College Outstanding Teaching Award for the Division of Science.

**Curriculum development**

In 2017 we made 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 an informal tutorial on algorithm analysis. CMPT 145 might recognize that set of blog posts as the precursor to the current course material.