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

IT5100AIndustry readiness

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.

Functional programmingHaskellType systems
Read the course notes
Course offerings

AY24/25 Semester 1 · AY25/26 Semester 1 · AY26/27 Semester 2

IT5100BIndustry readiness

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.

Data streamingReactiveXApache Kafka
Course offerings

AY23/24 Semester 2 · AY24/25 Semester 2 · AY25/26 Semester 1 · AY25/26 Semester 2 · AY26/27 Semester 2

IT5100EIndustry readiness

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.

CybersecurityWeb application security
Course offerings

AY23/24 Semester 1 · AY24/25 Semester 2 · AY25/26 Semester 2 · AY26/27 Semester 1 · AY26/27 Semester 2

IT5000Graduate bootcamp

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.

Discrete structuresMathematicsLean 4
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

IT5001

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

CS1010E

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

CS2030/S

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

IT5003

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

IT5004

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