I worked as a teaching assistant at both Western University and Simon Fraser University. Below are some of the courses I TAed:
This course introduces fundamental programming concepts and design using Python, with no prior experience required. Topics include data types, variables, control structures, functions, basic data structures (lists, tuples, sets, dictionaries), objects and classes, modular design, and problem-solving strategies. Examples and assignments span various disciplines to build practical programming skills.
This course explores data organization and manipulation, object-oriented programming in Java, and the implementation of abstract data types. Topics include lists, stacks, queues, trees, recursion, and file and memory organization.
This course explores core computational models and their capabilities, including finite state machines, regular expressions, push-down automata, and context-free grammars. A key part of the course involves studying the boundaries of computation through powerful abstractions like Turing machines. Some problems are solvable in principle but require impractical amounts of time, while others are unsolvable regardless of computational power. By examining these limits, this course provides a deeper understanding of what computers can- and cannot-do.
This course focuses on the design and analysis of algorithms and data structures, emphasizing the logical reasoning behind algorithm development over rote implementation. Students will explore computational thinking and learn techniques to evaluate algorithm performance, highlighting that Computer Science is fundamentally about problem-solving, not just following procedures.