NUS Module Reviews
CS1010X Programming Methodology
Taken in AY21/22 Sem 2 + ST 1 (iBLOC) under Prof Tan Tiow Seng
NOTE: AY22/23 is the last year that Prof Tan Tiow Seng will teach this, so past 2023 take this review with a grain of salt
I highly recommend that you take this module regardless of your experience. Teaching and materials are good and should set you up for success. It seems that most people taking this mod ORD-ed in November/February or were in non-combat vocations, though exceptions exist (who I have a lot of respect for!). Decent way to get into the groove of uni and meet new friends. Good way to get a taste of the bell curve (though it’s not shaped like a bell in CS1010X) and how godly hardworking your batchmates can be (multiple people finishing everything on coursemology and doing >5 PYPs per exam). Manageable with an internship/part-time work if you’re concerned about that.
The topics are the same since the comment by Uxinnn 2 years ago. The content covered is almost identical to that of CS1010S, but with one added chapter on Dynamic Programming (non-trivial, must be comfortable with solving DP problems) and two added chapters on Java (trivial, just need to know basic syntax).
- ~1h of pre-recorded lectures per week
- 2h of Recitation per week (you must pre-do the recitation worksheet)
- 1h of Review (optional) per week for the first half of the course
- 2h of Tutorial per week (you must pre-do the tutorial assignment)
- ~1 Mission and ~1 Lecture assignment on Coursemology every 2 weeks, with optional Sidequests and Contests
- 2h Midterm
- 2h Practical Exam
- 2h Finals
Something interesting about the Coursemology homework is that if you finish them early, you unlock future homework earlier. This means that it’s possible to secure full marks for the Coursemology component by late-March and you no longer have to do anything for the module except study when exams are near.
- 33% Homework (Reach Level 35 on Coursemology)
- 2% Free (Finish End-of-Module Survey)
- 16% Midterm
- 16% Practical Exam
- 33% Finals
Many people really liked Prof Tan’s problem-setting compared to those you saw in PYPs before 2019, since there is a more genuine focus on legit computational thinking (which favours those who understand the taught material well) rather than the idiosyncrasies of Python or classical graph algorithms (which just favours those with prior experience).
Similar to CS1101S and CS1010S, a bulk of the initial content of this module is based on the famous Structure and Interpretation of Computer Programs (SICP). Most of the difficulty for this module, especially for self-taught programmers (or even experienced programmers whose “mother tongue” is a procedural language), will therefore be at the first half of the module, where you are expected to reason about problems in a purely functional style. You will be introduced to lambdas, function composition, recursion, and map/filter/reduce before getting to do anything with loops or anything mutable like lists. I came across a few people who underestimated the module and thought it’d be simple but were swiftly humbled. IMO, here are the prerequisites for one to genuinely find it “simple”:
- Python has been your main language at some point
- You have self-studied an SICP variant or have experience solving basic problems in a functional language (for this module, I think SML derivatives will prepare you marginally better than Lisp derivatives, but if you can do anything in any of those languages you will find the first half trivial)
- You have basic experience in data structures and algorithms/cp, specifically in 1) time/space complexity analysis, 2) reasoning about data structure tradeoffs, and 3) solving DP problems (no need to know classical algorithms / data structures)
That is to say that even if you have a lot of programming experience, you probably won’t find the module “simple”. Therefore, the best way for you to benefit from and do well in the module is ultimately just to finish the Coursemology assignments and pay attention during recitations and tutorials. If you want to prepare before the module begins, work towards these 3 goals.
Lectures are pre-recorded, 90% by Prof Tan and the rest from Prof Ben Leong. I did not watch the lectures.
Recitations and Reviews are taught by Prof Tan. Everyone I know greatly enjoyed and appreciated Prof Tan’s teaching. He explains things clearly and interestingly and is prompt in answering questions. He expects the class to have attempted the recitation before the lesson, and if he poses a question to the class will wait until someone answers (you can’t just sit there and wait for him to answer himself).
Tutorials are taught by Zheng Jiaqi, Prof Tan’s PhD student. A fair initial reaction is to think that his voice is boring and to not pay attention (especially since tutorial questions are on coursemology so you know if you pass test cases before the tutorial starts) but once you start paying attention you realise he spits some hot fire in the form of his extension questions. These are much closer in difficulty to the exams and are a good test of your understanding.
Undergraduate TAs (Y1s and 2x Y2s) (mine was Samuel Yow) grade and provide comments on Coursemology, and email you moral support / other tips prior to exams. My TA was friendly and gave insightful comments on how to improve even if code passed test cases. It is useful to have a group of friends taking the module with different TAs so that you can all share the pre-exam emails and benefit from the union of exam tips. In particular, the email sent by one of the Y2 TAs Benjamin Tan before the midterms carried me for all time/space complexity questions in both the midterms and finals, which was a big W since that was my worst topic by far coming into the module.
10/10 take it if you can dedicate the time and don’t expect to come in and destroy with no effort regardless of your programming background.