Design & Analysis of Algorithms
Algorithm design strategies, asymptotic analysis, greedy methods, dynamic programming, graph algorithms, complexity and problem-solving.
TEACHING
More than two decades of Computer Science teaching, mentorship and student-centred learning.
Years of Teaching Experience
TEACHING PHILOSOPHY
My teaching philosophy is centred on making complex computing concepts understandable, practical and relevant.
I encourage students to move beyond memorisation by focusing on the reasoning behind algorithms, systems and computational methods.
I use a combination of conceptual explanation, worked examples, visual illustrations, algorithm tracing, coding exercises, project-based learning and research-oriented assignments.
My aim is to help students develop both theoretical understanding and practical problem-solving skills, while connecting classroom topics with real-world computing applications.
COURSES & TEACHING AREAS
Algorithm design strategies, asymptotic analysis, greedy methods, dynamic programming, graph algorithms, complexity and problem-solving.
Arrays, linked structures, stacks, queues, trees, heaps, graphs and efficient data organisation.
Classes, objects, inheritance, polymorphism, encapsulation, abstraction and practical object-oriented software development.
Processes, threads, scheduling, memory management, file systems, concurrency, synchronisation and operating-system design concepts.
Boolean expressions, logical operations, truth tables, simplification techniques and foundations of digital computation.
Lexical analysis, parsing, syntax and semantic analysis, intermediate representation, optimisation and code generation.
Intelligent systems, search, reasoning, machine learning foundations and practical AI applications.
Security principles, threats, vulnerabilities, access control, secure systems and contemporary cybersecurity challenges.
Classical and modern cryptography, symmetric and asymmetric techniques, hashing, digital signatures and emerging cryptographic systems.
Homomorphic Encryption, secure computation, federated approaches and privacy-preserving artificial intelligence.
TEACHING APPROACH & METHODOLOGY
Breaking difficult computing concepts into smaller, understandable steps before introducing complexity.
Using diagrams, execution traces and visual explanations to demonstrate how algorithms work.
Connecting concepts to implementation through practical coding exercises and laboratory work.
Developing analytical thinking through worked examples, classroom exercises and structured problem-solving activities.
Applying theoretical concepts to practical projects that encourage independent thinking and teamwork.
Introducing students to contemporary computing problems and connecting classroom learning with current research.
STUDENT MENTORSHIP
Mentorship forms an important part of my academic role. I work with undergraduate students to help them develop confidence in problem solving, technical communication, research methodology and independent learning.
I particularly encourage students interested in Artificial Intelligence, Cybersecurity, Privacy-Preserving Computing, Homomorphic Encryption and Secure Systems to move from broad interests toward clearly defined research problems.
My mentoring approach emphasises gradual development: understanding the problem, reviewing related work, defining a research question, selecting an appropriate method, implementation, evaluation and clear communication of results.
PROJECT-BASED LEARNING
I use project-based learning to help students connect theoretical knowledge with implementation and experimentation. Projects are designed to encourage students to apply course concepts to practical scenarios rather than treating laboratory activities as isolated programming exercises.
Depending on the course, activities may involve algorithm implementation and performance analysis, software design, data-structure experimentation, operating-system concepts, security problems, AI applications and research-oriented prototypes.
LEARNING RESOURCES
I develop and curate teaching materials designed to make difficult Computer Science topics easier to understand.
Structured notes and explanatory materials for core Computer Science topics.
Practical exercises supporting implementation, experimentation and skills development.
Visual demonstrations and illustrations designed to make algorithmic processes easier to follow.
Structured guidance for course projects, research activities and project-based learning.
TEACHING & MENTORSHIP
My goal is to help students understand computing deeply, apply it confidently and develop the independence required for professional and research-oriented problem solving.