Teaching

Teaching at UNSW is organised into two semesters per year (they used to be called sessions). Semester 1 runs in the first and Semester 2 in the second half of the year.

Session 1

In Semester 1, I now teach Software System Design and Implementation (COMP3141). It introduces rigorous and formal methods for the design and implementation phases of software system development. It discusses approaches to testing informed by formal designs, and discusses trade-offs between static and dynamic approaches to improve software correctness. The course is based on the Agda proof assistant, which takes the form of a dependently-typed functional programming language, and the purely functional language Haskell, which is used as a concrete implementation language and to illustrate specification-based testing. The use of types to inform program design, implementation, validation, and verification as well as the relationship between types and mathematical logic are central topics.

Session 2

In Semester 2, I am currently teaching a fairly new course called Language-Based Software Safety (COMP4181/9181). This courses covers language-based safety engineering techniques including advanced type systems, formal reasoning, encapsulation of side effects, domain specific languages, concurrency & parallelism, specification-based test generators, and prototyping with the aim of providing high assurance and increased productivity. It demonstrates at concrete examples, including security infrastructure software, how modern functional languages are used to achieve high assurance and conveys hands on experience by practical assignments.

Courses That I Used To Teach

I used to teach Distributed Systems (handbook entry) (which I previously taught together with Gernot Heiser and Peter Chubb) and which Ihor Kuz taught last year. The course is an elective for Year 3 & 4 as well as postgraduate students. It teaches concepts of distributed systems with a strong focus on operating system issues. It is a challenging course with a strong practical, hands-on coding component.

Alternating with Distributed Systems, I was teaching Advanced Functional Programming (handbook entry). The course ran only two times. It is organised in a seminar format with a couple of introductory lectures by myself at the start of session and student presentation afterwards. It covered advanced and research-oriented topics including type theory, compilation by program transformation, lambda calculus as a core languages, combinator libraries and embedded domain-specific languages, optimising programming transformations, and graphics applications.

For a while, I taught Data Structures and Algorithms (COMP1921) in Session 1. It's a vanilla data structures course based on Sedgewick's book and is taught in C - which admittedly is a less than ideal choice for teaching data structures and algorithms.

For some years, in Session 2, I taught Computing 1 A (handbook entry). This used to be a huge course -- one year, I taught over 600 students in this course. Dropping student numbers after the dot-com crash made it more manageable. We then had between 100 and 300 students per semester. The aim of COMP1011 was to teach basic principles of programming and computing in general. We use the programming language Haskell, which exhibits basic concepts of programming languages in a particularly clean way and allows students to solve relatively complex programming problems after a couple of weeks experience. In line with our School philosophy, students spend a lot of time in front of a computer coding and gaining practical experience.

In previous years, I was also involved in teaching Operating Systems (handbook entry for 3231 & handbook entry for 9201).

Miscellaneous Teaching-Related Information

• Copyright 2005 Manuel M T Chakravarty • Last modified: Thu Mar 8 14:14:49 EST 2007