Courses Taught

I began teaching at the University of Victoria during grad school in 2005 and later as a post-doc and full-time lecturer in 2011 teaching a range of first, second and third year courses.  In 2015 I began as a tenure-track instructor at the University of British Columbia (UBC) teaching a range of first and second year courses.  Currently at my position as an Assistant Teaching Professor at the University of Victoria I am working on curriculum development for first-year computer science courses.

Courses taught at UVic as Assistant Teaching Professor (2019-present):

  • CSC 110 – Fundamentals of Programming I
    • Introduction to designing, implementing, and understanding computer programs using an object-oriented programming language. Topics include an introduction to computing and problem solving, selection and iteration, arrays and collections, objects and classes, top-down design and incremental development.
    • most recent course outline
    • most recent course syllabus and schedule
  • CSC 111 – Fundamentals of Programming with Engineering Applications
    • Fundamentals of computer programming with real-world engineering examples using an imperative programming language. Topics include variables, data types, statements, control structures, functions, parameter passing mechanisms, expressions, data structures, files, pointers, storage allocation, elementary searching and sorting, recursion, encapsulation, modularity, incremental development, testing and debugging.
    • most recent course outline
    • most recent course syllabus and schedule
  • CSC 115 – Fundamentals of Programming II
    • Techniques, methods, and tools for systematic development and maintenance of software systems and documentation; basic algorithms and data structures; and fundamental concepts of object-oriented programming. Topics include control and data abstraction, modularization, abstract data types, layers of abstraction, information hiding, separation of concerns, type checking, program design, separate compilation, software libraries, techniques for the development of high-quality software components, program understanding.
    • most recent course outline
    • most recent syllabus and schedule
  • CSC 106 – The Practice of Computer Science
    • A survey of aspects of the application of Computer Science. Topics include: algorithms; complexity and decidability; programming; hardware; software engineering; selected interdisciplinary topics; ethical and societal considerations. Optional topics include: cryptography; security; databases; human computer interaction; graphics.
    • most recent course outline
    • most recent syllabus and schedule

Course Enrolments

SessionCourseClass size
202209CSC 110 (3 sections, 1 online, 2 in-person)471
202205CSC 11078
202205CSC 115105
202109CSC 110 (2 sections)355
202105CSC 110129
202105CSC 115166
202101CSC 111112
202009CSC 110 (2 sections)396
202005CSC 11093
202001CSC 111111
202001CSC 115193
201905CSC 11070
201905CSC 11596
201901CSC 115156
201901CSC 106170

Courses taught at UBC as tenure-track Instructor (2015-2019):

  • CPSC 213 – Introduction to Computer Systems (Jan 2018)
    • Software architecture, operating systems, and I/O architectures. Relationships between application software, operating systems, and computing hardware; critical sections, deadlock avoidance, and performance; principles and operation of disks and networks. Taught in assembly (SM213) and C programming languages.
    • CSC 213 Course Outline
  • CPSC 110 – Computation, Programs and Programming (6 offerings, DE and VC)
    • An introductory programming course (CS1) offered to both CPSC majors and non-majors.  This course teaches functional programming before procedural programming in a teaching language and supporting development environment.  The course design by Gregor Kiczales is based on the book How to Design Programs by Felleisen, Findler, Flatt, Krishnamurthi.
    • CPSC110 Course Outline
  • APSC 160 – Introduction to Computation in Engineering Design (2 offerings, VC)
    • An introduction to programming course for first-year engineering students registered in Applied Science (APSC).  This course teaches a procedural programming paradigm in C within a industry-strength development environment.  The first eight weeks of the course is taught by CPSC with a language focus introducing student basic programming constructs. The last four weeks of the course are taught by APSC and leveraging programming knowledge to control simple hardware.
    • APSC160 Course Outline
  • SCIE 113 – First-year Seminar in Science (1 offering, VC)
    • An introduction to scientific research and argumentative writing skills for first-year Science students.  Students explore what science is, how it is done and how it is influenced by society and cultural settings.  Students learn to construct and critically assess scientific arguments through discussions and writing of three essays across the term with feedback coming directly from the course instructor.
    • SCIE113 Course Outline
  • VANT 140 – Content and Language Enrichment Tutorials
    • Language support for linked content courses in the Vantage College curriculum.  Students spend one hour per week in both a content and language focused tutorial.   Students develop strategies for self-directed learning.  As a Vantage instructor for APSC 160 and CPSC 110 I am responsible for the content portion of VANT 140 for each course as well as varying support for the language portion of VANT 140 taught by an instructor from the Academic English Program.

Course Enrolments

SessionCourseClass
201805CPSC 213107
201801CPSC 11051
201801CPSC 213160
201709APSC 160 (V)89
201705CPSC 110182
201701CPSC 110 (V)60
201701SCIE 113 (V)22
201609APSC 160 (V)84
201609CPSC 110274
201605CPSC 110186
201601CPSC 110 (V)30
201509CPSC 110183
201509APSC 160 (V)37

NOTE: (V) indicates courses taught in Vantage College

Courses taught at UVic as Limited-Term Assistant Teaching Professor (2013-2015):

  • CSC 110 – Fundamentals of Programming I (4 offerings)
    • Introduction to designing, implementing, and understanding computer programs using an object-oriented programming language. Topics include an introduction to computing and problem solving, selection and iteration, arrays and collections, objects and classes, top-down design and incremental development.
  • CSC 115 – Fundamentals of Programming II (2 offerings)
    • Techniques, methods, and tools for systematic development and maintenance of software systems and documentation; basic algorithms and data structures; and fundamental concepts of object-oriented programming. Topics include control and data abstraction, modularization, abstract data types, layers of abstraction, information hiding, separation of concerns, type checking, program design, separate compilation, software libraries, techniques for the development of high-quality software components, program understanding.
  • CSC 106 – The Practice of Computer Science (1 offering)
    • A survey of aspects of the application of Computer Science. Topics include: algorithms; complexity and decidability; programming; hardware; software engineering; selected interdisciplinary topics; ethical and societal considerations. Optional topics include: cryptography; security; databases; human computer interaction; graphics.
  • CSC 116 – Fundamentals of Programming II: Engineering Applications (1 offering)
    • Development of software for real-world engineering applications using both imperative and object-oriented approaches. Topics include basic algorithms and data structures, abstract data types, generic collection types, design of large programs, using and building software libraries, user interfaces, debugging techniques, software documentation.
  • CSC 167 – Game Strategy, Interaction and Design (1 offering)
    • The objective of this course was to explore the aspects of game design and development in the context of software development practices. To give an introduction to the many theoretical aspects of games; to consider the continually evolving direction of games and interactive entertainment; and to gain exposure to the art and science of game design.  The course introduces:  game history, game structure and mechanics, software development practices, HCI, and computer graphics.
  • CSC 305 – Introduction to Computer Graphics  (1 offering)
    • The objective of this course is to introduce the programming principles of computer graphics, including fundamental data-structures and algorithms for rendering and modeling. The course covers practical programming through C++ and OpenGL, augmented by mathematical and theoretical foundations. Students are provided with an introduction to the OpenGL pipeline and its comparison to the classic RayTracing algorithm.   Shading, anti-aliasing, texture mapping and curves are introduced along with various data structures for algorithm acceleration.
  • SENG 310 – Human Computer Interaction (5 offerings)
    • Understanding human behaviour as it applies to user interfaces: work activity analysis, observational techniques, questionnaire administration and unobtrusive measures. Operating parameters of the human cognitive system, task analysis and cognitive modelling techniques and their application to designing interfaces. Interface representation and prototyping tools. Cognitive walkthroughs, usability studies and verbal protocol analysis. Case studies of specific user interfaces.
  • SENG 330 – Object-Oriented Software Development (1 offering)
    • Aspects of object-oriented analysis, design and development. Definition and comparison of object-oriented metrics. Overview of classical functional metrics and their effectiveness in measuring productivity for management or design quality of OO-systems. Verification methods for OO-software and how it differs from functional design testing. Maintenance and reuse issues.

Course Enrolments

SessionCourseClass
201505SENG 31054
201501CSC 110193
201501SENG 31076
201501CSC 106192
201409CSC 11654
201409CSC 115106
201405SENG 31045
201401CSC 30545
201309CSC 167101
201305SENG 31033
201301SENG 31055
201309CSC 110143
201209CSC 110111