CSC 158, Spring 1987. Programming Applications. Undergraduate course featuring topics drawn from graph theory and algorithms, numerical analysis, modelling and simulation, and artificial intelligence. Course was pre-designed. 120 students.
CSC 2428, Fall 1987. Computational Complexity. Graduate course dealing with time and space complexity classes in the Turing machine model of computation. Co-taught and designed with Charles Rackoff. 20 students.
CSC 2408, Spring 1988. Lower Bounds. Advanced graduate topics course dealing with concrete lower bounds for specific problems. Co-taught and designed with Faith Fich. 10 students.
CSC 364, Spring 1988. Efficient and Effective Computing. Undergraduate introduction to the theory of computation with emphasis on design and analysis of algorithms. Based on course design of Faith Fich. 80 students.
CS 760, Fall 1988. Lower Bounds in Parallel Computation. Advanced graduate topics course covering lower bound techniques for parallel comparison trees, parallel random access machines, and circuits. Designed course. 10 students.
CS 360, Winter 1989. Introduction to the Theory of Computing. Undergraduate course with emphasis on formal language theory. Based on existing course design. 120 students.
CS 131, Fall 1989. Introduction to Computer Science I. First-year undergraduate course surveying several areas of computer science. Course was pre-designed. 250 students.
CS 666, Fall 1989. Algorithm Design and Analysis. Graduate course covering order statistics, set manipulation, NP-completeness, and probabilistic algorithms. Based on existing design with some development of new material in preparation for course revision. 20 students.
CS 464/664, Winter 1990. Computational Complexity Theory. Graduate and senior undergraduate course covering time and space complexity, complete problems for various classes, randomness, alternation, and parallel computation classes. Based on existing design with some development of new material. 12 students.
CS 131, Fall 1990. See Fall 1989. Responsible for course co-ordination (4 instructors, 7 graduate TAs, 5 full-time tutors, 900 students). Developed new ``challenge'' assignments and roughly an hour per week of new lecture material for advanced section. 120 students.
CS 498O/690B, Winter 1991. Concrete Mathematics. Graduate and senior undergraduate course surveying techniques of mathematical manipulation useful in CS analysis (recurrences, series, generating functions, probability). New course; designed course based on textbook by Knuth, Graham, Patashnik, and developed additional material. 15 students.
CS 134, Fall 1991. First-year undergraduate course. A ``first course in computer science'' after a course in programming, covering algorithm design, correctness, efficiency, and elementary data structures. Developed entire course. 120 students.
CS 134, Winter 1993. See Fall 1991. 450 students.
CS 760C, Spring 1993. Probabilistic Methods in Computer Science. Advanced graduate topics course comprising a look at the theory of probability as applied to computer science (expectation, Chebyshev and other inequalities, Chernoff-Hoeffding tail bounds, probabilistic recurrence relations, martingales, random walks on graphs). Developed entire course. 12 students.
CS 134, Winter 1994. See Fall 1991. 180 students.
CS 666, Fall 1994. See Fall 1989. 10 students.
CS 134, Winter 1995. See Fall 1991. 100 students.
CS 492, Winter 1996. Social Implications of Computers. Senior undergraduate course. Made substantial revisions: no lectures, three discussion hours per week, weekly written assignments to be published on the World-Wide Web, peer evaluation of essays also Web-readable, role-playing exercises looking at specific issues. 20 students.
CS 492, Winter 1997. See Winter 1996. 20 students.
CS 464/664, Winter 1997. See Winter 1990. New textbook; reordered material, wrote completely new lecture notes, assignments, and take-home final. 16 students.
CS 251, Fall 1998. Digital Networks and Design. 2nd year core CS course, first offering after being moved from 3rd year. Co-ordinated with two other instructors, taught from new edition of textbook (substantially revised). Collaborated in design of assignments, tests, and common lecture material. 90 students.
CS 341, Winter 1999. First full offering at 3rd year level after being moved from 4th year. Co-ordinated with one other instructor, collaborated in design of new assignments, tests, and lecture notes.
CS 251, Fall 1999. Digital Networks and Design. See Fall 1998. 90 students.
CS 492, Winter 2000. See Winter 1996. 30 students.
CS 251, Fall 2000. Digital Networks and Design. See Fall 1998. 120 students.
CS 492, Winter 2001. See Winter 1996. 20 students.
CS 251, Fall 2001. Computer Organization and Design. Complete revision of course, change in focus and emphasis, new textbook, new notes and transparencies, new assignments. 200 students (2 sections).
CS 341, Fall 2002. Algorithms. Used new textbook, coordinated with one other instructor, collaborated in design of new assignments and tests, created PowerPoint lectures. 200 students (2 sections).
CS 761, Winter 2003. Randomized Algorithms. Similar to CS 760C in Spring 1993, but with proper textbook. Created LaTeX lecture slides, assignments, takehome final. 12 students (plus auditors).
CS 251, Fall 2003. Computer Organization and Design. See Fall 2001. 90 students.
CS 251, Winter 2004. Computer Organization and Design. See Fall 2001. 45 students (8:30 section!).
CS 135, Fall 2004. Designing Functional Programs. New first course in programming using the functional language Scheme. Created Scheme systems to manage web page and create lecture slides, presentation handouts, and instructor notes from a single source; created full set of slides, assignments, challenge handouts, and exams. 40 students.
CS 365, Winter 2005. Models of Computation. Enriched course combining aspects of CS 360 and CS 464 (see above). Created LaTeX lecture slides, assignments, exams. 20 students.
CS 135, Fall 2005. Designing Functional Programs. See Fall 2004. 130 students.
CS 245, Winter 2006. Logic and Computation. Changed textbook and emphasis of course, created new set of LaTeX lecture slides and (with other instructors) assignments and exams. 35 students.
CS 135, Fall 2006. Designing Functional Programs. See Fall 2004. 100 students.
CS 245, Winter 2007. Logic and Computation. See Winter 2006. 85 students.
CS 136, Winter 2008. Elementary Algorithm Design and Data Abstraction. Piloted a new version where C instead of Java was introduced as a second language. 170 students.
CS 145, Fall 2008. Design, Abstraction, and Implementation. The first-ever "advanced" CS course, combining CS 135 and CS 136 into a single term for high-aptitude students. 50 students.
CS 136, Winter 2009. Elementary Algorithm Design and Data Abstraction. See Winter 2008. 90 students.
CS 145, Fall 2009. Design, Abstraction, and Implementation. See Fall 2008. 50 students.
CS 442, Winter 2010. Principles of Programming Languages. Shifted emphasis of course, designed LaTeX lecture slides, assignments, exams. 50 students.
CS 145, Fall 2011. Designing Functional Programs (advanced version). Complete redesign due to the introduction of CS 146: new approach, new slides, new assignments. Result was quite different from CS 135. 50 students.
CS 146, Winter 2012. Elementary Algorithm Design and Data Abstraction (advanced version). First attempt at an enriched version of CS 136, continuing in the style of CS 145. 50 students.
CS 442, Winter 2012. Principles of Programming Languages. See Winter 2010. 75 students.
CS 145, Fall 2012. Designing Functional Programs (advanced version). See Fall 2011. 60 students.
CS 798, Fall 2012. Reduction Semantics for Functional Programming Languages. Graduate course using PLT Redex textbook. Designed slides, assignments. 25 students.
CS 146, Winter 2013. Elementary Algorithm Design and Data Abstraction (advanced version). Reorganized course to operate in a top-down instead of bottom-up approach, with greater emphasis on simulators, interpreters, and compilers. Many new slides and assignment questions. 60 students.
CS 145, Fall 2013. Designing Functional Programs (advanced version). See Fall 2011. 80 students.
CS 842, Fall 2013. Functional Parsing. Seminar graduate course reading research papers. 8 students.
CS 146, Winter 2014. Elementary Algorithm Design and Data Abstraction (advanced version). See Winter 2013. Further development using a simplified ARM assembler as the lowest level. 70 students.
CS 442, Winter 2014. Principles of Programming Languages. See Winter 2012. More careful coverage of type theory. 70 students.
CS 145, Fall 2014. Designing Functional Programs (advanced version). See Fall 2011. 70 students.
CS 798, Fall 2014. Software Foundations. Graduate course covering topics in functional programming, logic, semantics, and type theory using the proof assistant Coq. 25 students (highest enrollment of any grad course that term).
CS 146, Winter 2015. Elementary Algorithm Design and Data Abstraction (advanced version). See Winter 2013. 60 students.
CS 442, Winter 2015. Principles of Programming Languages. See Winter 2012. 55 students.
Math 642, Spring 2015. (Online) Introduction to Computer Science: A Mathematical Perspective. Developed and taught for the Master of Mathematics in Teaching program, using material from CS 135 and CS 145. 50 students. Also delivered as a three-week course to 35 graduate students at the African Institute of Mathematical Sciences in Mbour, Senegal, January-February 2016.
CS 245E, Fall 2016. Logic and Computation (Enriched). Completely new approach to this course, based on intuitionistic type theory and "proofs as programs". Students construct a small proof assistant for propositional and predicate logic that can prove theorems about recursive code for functions on elementary data types such as natural numbers. 50 students.
CS 798, Fall 2016. Software Foundations. See Fall 2014. 37 students (half again as many students as the next largest grad offering that term).
Math 642, Spring 2017. (Online) Introduction to Computer Science: A Mathematical Perspective. See Spring 2015. 50 students.
CS 245E, Spring 2017. Logic and Computation (Enriched). See Fall 2016. 41 students.
CS 240E, Spring 2017. Data Structures and Data Management (Enriched). A modern perspective on the topic, with emphasis on immutability, persistence, and common frameworks. 53 students.
CS 600, Fall 2017. (Online) Introduction to Computer Science for Data Science. For STATS MMath Data Science students, preparing them for CS grad courses. Synthesis of material on computer architecture, operating systems, programming languages, algorithms, and networks. 12 students.
CS 442, Winter 2018. See Winter 2015. 60 students.
CS 240E, Winter 2018. See Spring 2017. 40 students.
CS 798, Fall 2018. See Fall 2016. Beta test of some of my revisions to the textbook. 25 students.
CS 600, Fall 2018. (Online) See Fall 2017. 12 students.
Math 642, Winter 2019. (Online) See Spring 2015. 20 students.
CS 600, Fall 2019. (Online) See Fall 2017. 20 students.
CS 842, Fall 2019. Dependent Types and Software Verification. A version of CS 798 (see Fall 2016) but using Agda and a textbook by Wadler and Kokke. 30 students.
CS 600, Fall 2020. (Online) See Fall 2017. 6 students.
CS 245E, Fall 2020. (Online due to COVID-19.) Revised from Spring 2017 version to use Agda and my online flanerie Logic and Computation Intertwined. 60 students.
Math 642, Winter 2021. (Online) See Spring 2017. 45 students.
CS 747, Spring 2021. (Online). Software Verification Using Proof Assistants. Revised, permanently online version of CS 842 with expanded notes and asciicasts. 30 students.
CS 600, Fall 2021. (Online) See Fall 2017. 11 students.
CS 747, Winter 2022. (Online) See Spring 2021. 35 students.
CS 600, Fall 2022. (Online). See Fall 2017. 12 students.
CS 245E, Fall 2022. See Fall 2020. 60 students.
Math 642, Winter 2023. (Online) See Spring 2017. 20 students.