02 Teaching & learning
Making ideas click.
From a first program to a first proof, I enjoy helping students connect abstract ideas with things they can build. I teach at the NUS School of Computing, with a focus on the foundations and practice of software development.
Selected courses
Teaching history and scheduled offerings
Typed Functional Programming
Building robust, reusable software with the ideas behind Haskell, OCaml, and Scala: strong types, composition, abstraction, effect handlers, and safe asynchronous and concurrent programming.
Read the course notesCourse offerings
AY24/25 Semester 1 · AY25/26 Semester 1 · AY26/27 Semester 2
Stream Processing
Working with data as it arrives. We explore the basics of streams/iterables, ReactiveX, Apache Kafka and high-performance stateful stream processing with Bytewax/Apache Flink.
Course offerings
AY23/24 Semester 2 · AY24/25 Semester 2 · AY25/26 Semester 1 · AY25/26 Semester 2 · AY26/27 Semester 2
Security Best Practices
Practical security for web applications: encryption, authentication, authorization, secure coding, threat modelling, and deployment. Students work with common threats, defensive techniques, and industry practices including OWASP.
Course offerings
AY23/24 Semester 1 · AY24/25 Semester 2 · AY25/26 Semester 2 · AY26/27 Semester 1 · AY26/27 Semester 2
Introduction to Computing Foundations
I teach the mathematics and discrete structures portion of this bootcamp. We move from numbers, sets, and logical reasoning to proofs, the Curry–Howard correspondence, and interactive theorem proving in Lean 4—showing how mathematics and programming fit together.
Course offerings
AY23/24 Semester 2 · AY24/25 Semester 1 · AY24/25 Semester 2 · AY25/26 Semester 1 · AY26/27 Semester 1
Previously taught
Lecturing and tutoring
Software Development Fundamentals
An accelerated introduction to programming for students from non-computing backgrounds, covering abstraction, recursion, data structures, testing, and the software development process.
AY20/21 Semester 2 · AY21/22 Semesters 1 & 2 · AY22/23 Semesters 1 & 2 · AY23/24 Semester 2
Programming Methodology
Computational thinking and problem solving, from basic programming constructs and data structures to algorithms, testing, debugging, and recursion.
AY18/19 Semesters 1 & 2 · AY19/20 Semesters 1 & 2, Special Term 2 · AY20/21 Semester 1
Programming Methodology 2
Object-oriented and functional programming: composition, inheritance, polymorphism, lambdas, closures, continuations, and monads, applied to the design of medium-scale programs.
AY18/19 Semester 2 · AY19/20 Semesters 1 & 2, Special Term 1 · AY20/21 Semester 1
Data Structures & Algorithms
Efficient computational problem solving with lists, hash tables, heaps, trees, and graphs; algorithm design, complexity analysis, correctness, and the limits of computation.
AY20/21 Semester 2
Enterprise Systems Architecture
Architecting scalable enterprise systems, with an introduction to software architecture, object-oriented analysis and design, and the Unified Modelling Language.
AY20/21 Semester 2