CS2030 - Programming Methodology II Review

CS2030

NUSMods Link

Taken in: AY22/23 Semester 2
Lecturer: Prof Henry Chia
Tutor: (Student TA) Ben and Brian

Schedule:
  • 2h Lecture (Recorded or in-person)
  • 1h Recitation
  • 2h Lab
Grading:
  • 40% - Final Exam
  • 15% - Individual Lab Project
  • 4% - Other Lab Assignments
  • 15% - Practical Assessment 1 (Week 7 Lab)
  • 20% - Practical Assessment 2 (Week 13 Lab)
  • 6% - Class Participation or Self-Learn activities*:
    • 6% - CS2030 Wiki/Forum Posting
    • 3% - Self-Learn Exercises

* I believe this means you can get a max of 6% from the sum of both components. Labs and Self-learn exercises are all on CodeCrunch.


Welcome to CS1010: Prepare to die edition. HAHA! Jokes aside, I took this module because I heard it was tough, but useful in the long run. I agree! I feel, if nothing else, I've at least learned proper programming style/standards and some practices. Oh, and I learned to use Java and Vim, both of which I've grown to love for their features.

If I were to use a metaphor, CS1010 teaches you the alphabet, words, and how to form sentences. CS2030 then teaches you grammar, punctuation, style, when to speak, and what to say. Okay, that may not be the best metaphor. Anyway, I'll summarise the learning objectives of this module. At the end of the module, your code should be less messy and less hack-y (A structured, well-built solution instead of a quick-fix).

Like other CS mods, this had quite a bit of workload. As usual, the learning curve is steep at first when you're just getting the hang of things. The transition from Python to Java can be jarring, and the transition from a text editor to VIM??? Even more of a culture shock. However, it becomes easier with more practice (duh!) so I would highly recommend you take on this module with discipline to watch all lectures ON TIME (Don't save them to be watched later) and consistent effort throughout the weeks through your labs. You'll do fine. All that continuous work adds up and you won't actually need to study because you'll be well-practiced.

I feel I learned a lot, so I recommend this module for sure. It's a basic module that opens up the rest of CS anyway (prerequisite for many mods). I really do think it helps build a solid foundation for those who wish to do CS. I took this module for my CS Minor, so I'll review it from that perspective. It's a core module for some students too, I think Business Analytics? I hope this review can help you too!

Prof Henry is a pretty good lecturer too. You can tell he really knows his stuff and enjoys it. He taught the recitations this time round too so it was an additional opportunity to ask him questions.


Detailed Breakdown

Some Learning Objectives

General Overview

This module uses Java and emphasises on Object-Oriented Programming. So, you'll be dealing with a lot of classes which Java is good for. You'll also use Vim as the primary text editor. It can be hard to use at first, but I've grown to like it. Nonetheless, you aren't forced to use Vim, but you'll have to use it in Labs and PA.

Effect-Free Programmming

One of the major learning points in this module is making your code effect-free, a.k.a. no changes in state, no input/output, etc. This may be shocking if you came from CS1010 or CS2040, where of course your code performs stuff like changing variables, appending to lists, printing statements, and so on. As an example, this means if you want to edit a list, you should return a new edited list instead of changing the one given to you.

You'll need to change your approach to problems for this. Good thing is, you don't need to do much problem-solving in this module like CS2040. No need to optimise for speed and memory, just do the most straightforward solution (which is sometimes given to you) in an effect-free manner.

Module Structure

Labs

In your first few labs, you'll work towards a Lab project that spans a few weeks' worth of Lab submissions (Lab 1 to Lab 5). You'll build a program that grows with new requirements each week. You'll need to use good Object-oriented and SOLID principles in the Lab, and if you want to complete it, you MUST be consistent. Do NOT leave it for last minute.

Afterwards, the last few labs (Labs 6 to 8) are each independent of each other, to practice more learning objectives like generics and context (It's probably better experienced than explained here).

Assessments

PA1 and PA2 are done during lab hours. They're of similar difficulty to the individual Labs. The difference from CS2030S is that you can take home the PA. So, you'll work on it for 90mins in lab, then complete it over the next week. Halfway through, they'll upload a video walkthrough to explain a solution. The PAs are graded based on how similar your submission code is to the one done in the 90mins of Lab (it's moderated, don't worry). However, you have to upload a working solution within the week or you get 0. I love this aspect of CS2030 tbh, took away the stress of PA and you still get to learn from it instead of YOLO-ing the code in 90mins. Note that once you take home the PA, you can work on it in your editor of choice.

Lastly, there's the final exam, which, based on previous papers, is 2 hours, 5 questions. The problem with my sem was that our final exam was all linked, so you had to work on them in sequential order. It was basically PA3 but you couldn't take it home. I still found this exam easier compared to past year papers. There was only ONE stream question, NO async question, and some anonymous inner class questions (which can be tricky). YMMV.

There are some self-learn exercises which amount to a paltry 3%. They're good to do and I got good practice from doing them, but I didn't do all of them. Good heavens, where got time! They sometimes upload walkthrough videos for the exercises/labs/past year assessments so it's good to watch as well.

Final Note

As usual, feel free to contact me if you require help. In the interest of academic honesty, I won't be sharing my code, but I can share the past-year questions (I will still be happy to help with problems). I also applied to be a TA, so if I am teaching in AY23/24, come find me in my lab! Hahahaha. (AY23/24 Note: I ended up TA-ing CS1010 instead :P)

Expected grade: A

Actual grade: A+

Reviewed by: ZH

Comments

Popular posts from this blog

LAK1201 - Korean 1 Review

CS2113/T - Software Engineering & Object Oriented Programming Review

GES1041 - Everyday Ethics in Singapore Review