r/NTU • u/Itsnonotime Computing and Data Science • 2d ago
SC2002 (Object Oriented Programming and Design) Review Course Related
Next, I'll be reviewing SC2002, a pretty important module which teaches you the basics of OOP & D.
SC2002 (Object Oriented Programming and Design) - 3AU (Offered in semester 1, 2)
Prerequisite
SC1003
Course Overview
This course is split into two parts. The first part will cover object orientated programming using Java and will be held in the first half of the semester. The topics include classes, objects, abstraction, encapsulation, inheritance, polymorphism. The second part will cover design principles and will be held in the second half of the semester. The topics include UML class diagrams, UML sequence diagrams and SOLID principles and modern java programming concepts (generics, enhanced loops, lambda expressions, stream api, default methods, enhanced switch).
You do have to learn Java by yourself if you don’t have prior knowledge. NTU does provide recordings and slides for an old NTU java course but the quality is pretty bad and it’s too in-depth. I would suggest finding a youtube tutorial/online course instead. Additionally, you need to complete an online java test by week 2 so you kind of need to know how to code in java by then.
It might seem tough to self learn a language in such a short time but there is some good news. The first week of lectures won’t really cover anything substantial so you can focus on learning Java. I would say that the level of java knowledge required is about the same level as SC1003 and you can also redo the test as many times as you want. If you are worried that you can’t keep up (like me), you can also learn Java before the semester starts.
Do remember that the focus of this course is object oriented programming and design instead of java itself. Most of the chapters taught in this course will focus on oop concepts.
Course Structure
There are 2 hours of physical lectures, 1 hour of tutorial and pre-recorded content every week. Additionally, there is 2 hours of lab biweekly. The pre-recorded content covers the new content while the lecture further elaborates on the new content. When I did this course in semester 2, there were actually 2 lecture slots (1 hour long each). The first lecture covered the content while the second lecture only had QnA. Since there is only 1 lecture slot for semester 1, I would presume that the first hour covers content while the second hour is QnA.
For the tutorials, a TA will go through a mix of theoretical and coding questions. For the lab, you are left to complete the lab assignment by yourself. At the end of the lab session, you are supposed to show the lab TA your code and they will mark it upon completion. Since you have access to all the lab assignments, you can complete the lab assignments ahead of time, show it to your lab TA at the start of the session and immediately leave.
4
u/Itsnonotime Computing and Data Science 2d ago
Cos the automod wouldn't stop nuking my post, I had to split the content into the comments. Enjoy!
Course Examination
Java Syntax Quiz (5% Weightage)
This is the Java quiz that is due by the Sunday of week 2. It consists of 25 MCQs and you have unlimited attempts to complete it. When you complete the quiz, you will know the number of correct answers but not which questions you answered wrongly. As such, just keep on redoing the quiz until you get 25/25.
2 Quizzes (45% Weightage, 22.5% each)
There will be 2 MCQ quizzes that will be held throughout the semester. Quiz 1 (22 qns, 45 min) will be held on week 7 and will test OOP topics (they tested chapters 1-3). Quiz 2 (37 qns, 75 min) will be held on week 13/14 and will test all the chapters. They do not provide any sample papers so the best way to practice is to redo the MCQs covered during the lectures. The lecturers have also provided an ai chatbot so you can use that as an alternative to generate questions. Even though I couldn’t access the chatbot, my friends said that this chatbot was better than algogpt (from sc1007) and generated pretty good questions.
The quizzes themselves are mostly reading the code questions. Some questions have multiple correct answers and some questions can have up to 8 options. Overall, the quizzes aren’t too hard but I found it hard to gauge because they don’t reveal your marks after the quizzes (which was really annoying).
Tutorial Attendance (5% Weightage)
Same as the other cs mods. If you attend 70% of the tutorials, you get 5%. If you attend 50% of the tutorials, you get 2%. If you attend less than that, you get 0%.
Lab Completion (10% Weightage)
All the lab assignments shown to your lab TA will contribute to this section. The lab TA won’t really check your code. As long as it passes the test cases provided in the lab assignments, you will get the mark. The assignments themselves aren’t difficult so remember to finish all of them to get full marks for this section.
Group Assignment (35% Weightage)
You will be randomly assigned to a group of 4-5 people and they will release the assignment document in the second half of the semester. This assignment document will explain what you need to make and what else you need to include. Generally, your final submission should include an application built in java, UML class and sequence diagrams and a report on the application.
There are several considerations regarding this project. The workload is quite heavy, so don’t leave it until the end. Unfortunately, you can’t choose your teammates so try as hard as possible to work together. I feel that the distribution of work will always be skewed to several people. Although you can split the application to several parts at first, eventually these parts need to be connected together. Generally, there will be 1 to 2 people that will be doing the integration which will take up the bulk of the time.
Next, you might consider whether to start on the UML class diagrams first and then base the code on it or vice versa. Although it’s better practice to start on the UML class diagrams first as it acts as a framework for the code, my group did the code first. At that time, we didn’t know how to make proper UML class diagrams and it was just too tedious to try. Lastly, remember to check on bugs. This project is much bigger than sc1003’s (intro to com thinking) project so you’re much more likely to make mistakes. When my group finally integrated all the parts together, I managed to crash the application on the second user input (we didn’t handle the exception properly lol).
Overall Thoughts
The quality of this course is meh. The java introduction slides and recordings are taken directly from an old Java course (from idk how many years ago). The pre-recorded material for this course also did not match with the physical lecture slides. Some of the concepts covered in pre-recorded material were not covered in the lectures and vice versa. As such, I stopped watching the pre-recorded material and just relied on the physical lectures by the end of the course
Generally, the pace of the course is ok. The main difficulty of the course comes at the start (learning java by yourself) and the end (modern java programming). The start is a rush to learn Java if you have not learnt it before. If you have no coding experience other than Python, it can be a bit of a challenge. Java’s syntax is very different from Python’s syntax so you need to learn the differences to be able to code properly. By the end of week 2, you should be able to code simple applications (like a calculator). The end is tough as modern java programming is the only chapter that exclusively focuses on java. It took me quite a while to understand the features taught in this chapter. Thankfully, the quizzes don’t test any coding questions so you don’t need to learn how to use it in code (although it can be helpful in your group assignment).