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.
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.
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.
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.
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.
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.
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.
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.
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
Session
Course
Class
201805
CPSC 213
107
201801
CPSC 110
51
201801
CPSC 213
160
201709
APSC 160 (V)
89
201705
CPSC 110
182
201701
CPSC 110 (V)
60
201701
SCIE 113 (V)
22
201609
APSC 160 (V)
84
201609
CPSC 110
274
201605
CPSC 110
186
201601
CPSC 110 (V)
30
201509
CPSC 110
183
201509
APSC 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.
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.