Teaching
Courses that I taught, participated in, and enjoyed.
As an Instructor
| Term | Course | Title | Institution |
|---|---|---|---|
| W24 | ECE 459 | Programming for Performance | University of Waterloo |
| W23 | ECE 459 | Programming for Performance | University of Waterloo |
| S22 | INFO8110 | Operating Systems Design | Conestoga College |
| W22 | PROG8130 | Data Structures & Algorithms for Embedded Programming | Conestoga College |
| W21 | EECE2617 | Embedded Operating System Development | Conestoga College |
| W21 | INFO8110 | Operating Systems Design | Conestoga College |
As a Teaching Assistant (TA)
| Course | Title | Institution |
|---|---|---|
| ECE 459 | Programming for Performance | University of Waterloo |
| ECE 454 | Distributed Computing | University of Waterloo |
| ECE 356 | Database Systems | University of Waterloo |
| SE 350 | Operating Systems | University of Waterloo |
| ECE 254 | Operating Systems and Systems Programming | University of Waterloo |
| ECE 252 | Systems Programming and Concurrency | University of Waterloo |
| ECE 155 | Engineering Design with Embedded Systems | University of Waterloo |
Course Descriptions
ECE 459: Programming for Performance
Profiling computer systems; bottlenecks, Amdahl’s law. Concurrency: threads and locks. Techniques for programming multicore processors; cache consistency. Transactional memory. Streaming architectures, vectorization, and SIMD. High-performance programming languages.
ECE 454: Distributed Computing
Principles of distributed computing; architectures and middleware; servers, processes, and virtualization; upper-layer network protocols, interprocess communication and remote procedure calling; concurrency, synchronization and distributed algorithms, dependable distributed systems and fault tolerance.
ECE 356: Database Systems
Data models, file systems, database system architectures, query languages, integrity and security, database design.
SE 350: Operating Systems
This course is an introduction to the fundamentals of operating systems design and implementation. Topics include processes, threads, concurrency, synchronization, scheduling, memory management, file systems, device management, and security.
ECE 254: Operating Systems and Systems Programming
Concepts of operating systems and systems programming; utility programs, subsystems, multiple-program systems; processes, interprocess communication, synchronization, and concurrency; memory management, segmentation, and paging; loading and linking, libraries; resource allocation, scheduling, performance evaluation; I/O systems, storage devices, file systems; protection, security, and privacy.
ECE 252: Systems Programming and Concurrency
Processes and threads (pthreads); system calls; concurrency (semaphore, mutex, monitors, and barrier synchronization); user-level memory management. Performance and correctness of concurrent systems. Deadlock detection and recovery; file systems
ECE 155: Engineering Design with Embedded Systems
Introduction to embedded systems, review of engineering design and analysis principles, software development life cycle, integrated development environments, use of software requirements and specifications, unified modelling language and documentation, event handling, simulation, project management, project scheduling, testing, verification, and maintenance considerations
INFO8110: Operating Systems Design
This course performs an in-depth study of the organization of operating systems for various computer platforms. Aspects covered include process scheduling, process synchronization, multi-process computation, deadlock avoidance, and file system organization and integrity.
PROG8130: Data Structures and Algorithms for Embedded Programming
This course emphasizes software design and implementation that make use of efficient and effective data organization. Essential data structures are discussed, analyzed, and implemented in the context of embedded software development. Algorithms are studied and implemented. Efficiencies and costs of selected algorithms are evaluated.
EECE2617: Embedded Operating System Development
Students will adapt and manipulate an operating system and its custom applications on embedded hardware taking the following topics into consideration: design, analysis, testing, security, fault tolerance, portability, documentation, architecture issues and device drivers.