Operating Systems
Core operating-system concepts with emphasis on system calls, processes and threads, CPU scheduling, synchronization, deadlocks, memory management, file systems and the connection between user programs and kernel services.
I aim to make technically demanding material approachable without diluting rigor, connecting theoretical foundations with implementation, problem solving and independent thinking.
I view teaching as a balance between conceptual clarity and technical depth. Classroom discussions establish the foundations; laboratory and project work then ask students to implement, test and reason about those ideas. My assessments emphasize understanding over memorization, while student projects encourage reproducibility, technical communication and independent problem solving.
Core operating-system concepts with emphasis on system calls, processes and threads, CPU scheduling, synchronization, deadlocks, memory management, file systems and the connection between user programs and kernel services.
Formal languages, finite automata, regular expressions, grammars and the foundations of compiler construction, with emphasis on problem solving and translating formal models into computation.
Layered network architecture, data-link protocols, addressing and routing, transport protocols, application-layer services and network analysis through theory and laboratory work.
Conducted laboratory sessions and mentored students in supervised and unsupervised learning including regression, classification, clustering, dimensionality reduction, ensemble learning and neural networks.
Conducted laboratory sessions covering core data structures, recursion, searching, sorting, divide-and-conquer, dynamic programming and greedy algorithms.
Led tutorials on programming paradigms, type systems, abstraction, scope, parameter passing, inheritance, polymorphism, concurrency, runtime environments, exception handling and memory management.