These are the courses that I regularly teach.

Foundations of Program Analysis
CMPUT 497 Foundations of Program Analysis

This undergraduate course introduces students to intermediate representations, inter-procedural and intra-procedural analyses, call graphs, pointer analysis, and analysis frameworks. Students acquire a solid knowledge about the theory of program analysis, as well as practical experience through the course assignments and project.

Static Program Analysis
CMPUT 620 Static Program Analysis

This graduate course provides a platform for students to discuss research papers about both classical and state-of-the-art program analyses. It also enables students to conduct in-depth research in program analysis, with the ability to apply it to their own area of interest (e.g., security or usability).

Computer Organization and Architecture I
CMPUT 229 Computer Organization and Architecture I

This undergraduate course introduces students to the interface between software and hardware, as well as the major issues with the design and implementation of parallel programs that run in multiple processors. Students leave this course with an understanding of how machine code is generated by a compiler/assembler.