Programming Methodology II

Academic Year 2021 - 2022
Semester 2

NUSMods Description

This module is a follow up to CS1010. It explores two modern programming paradigms, object-oriented programming and functional programming. Through a series of integrated assignments, students will learn to develop medium-scale software programs in the order of thousands of lines of code and tens of classes using object-oriented design principles and advanced programming constructs available in the two paradigms. Topics include objects and classes, composition, association, inheritance, interface, polymorphism, abstract classes, dynamic binding, lambda expression, effect-free programming, first class functions, closures, continuations, monad, etc.


This module is taught by Prof Boyd Anderson and Prof Ooi Wei Tsang.

There are 2 x 2hr lectures and 1 x 1hr Recitation and 1 x 2hr Labs each week

There are weekly labs, 2 Practical Exams, 1 Midterm and a Final. The labs are meant to make sure you have hands-on experience in applying what you have learnt. The 2 Practical exams are notorious for being challenging, however, I somehow managed to get close to full marks for them. For PA1, I got 29/30 only because I was blind. The compiler threw a warning of raw types, but I cannot find it for some reason. Took me 1hr after the exam ended to finally locate it. I thought I messed up the finals but somehow performed in the upper quartile. Finals was easy for me.

I personally feel very stressed about this module. This is because I am very new to Java as I am used to writing only C++ code. The labs were also very tedious and I would spend quite a while to complete. Marks were deducted for the most trivial mistakes. It is insufficient to just learn from the notes, one needs to code often to really grasp the concepts. Experiment as much as possible and understand why something does or does not work. It is very crucial to find out what you are unsure about and this will help you greatly, as it had helped me. I faced some health issues when doing this module too as I got struck with dengue on the day of PA2. I had to miss lessons but I made enough new friends to actually help me catch up. My TA also managed to accommodate me when I had to rush to the hospital for the blood test by setting up a Zoom Lab lesson. As for module content, this is the first time I came across functional object-oriented programming. Hence, everything was very interesting for me. I was particularly interested in Monads, Functors and also Asynchronous Programming. It prompted me to explore them a little bit deeper after exams and now I am planning to take CS3211 Parallel and Concurrent Programming. Despite all the challenges, I was heartened to get an A for this module.