Spinning planet icon

Year 2: classes I took

A quick summary of classes I took in my second year at NUS.

Classes I took in my second year:

MA1522 - Linear Algebra for Computing


I took this class in AY23/24 Sem 2, it was taught by Prof. Tan Kai Meng and Wang Fei

TLDR; MA1522 is a math class that introduces useful linear algebra concepts that are routinely applied in CS. It has a relatively high workload— 2 lectures every week that were recorded, 1 (non-compulsory) tutorial session, 5 graded quizzes, 5 assignments, no midterm exam, and a heavy 60% final exam. It has quite a high workload, but is taught at a comfortable pace.

Notable topics

  • Matrices
  • Euclidean spaces, Linear combinations and linear span, Subspaces, Linear independence, Bases and dimension
  • Eigenvalues and eigenvectors, Diagonalisation
  • Linear transformations between Euclidean spaces

Quite good actually

Math is not my strongest suit, but I found MA1522 quite do-able (compared to MA1521 Calculus) because the pace was a lot more manageable. The workload is pretty high— there were 2 lectures + (not compulsory, but recommend not to skip) 1 tutorial session weekly, 5 quizzes and 5 assignments, no midterm exam, and a final exam. The quizzes and assignments were not particularly difficult, and the final exam should be fine as long as you have sufficient practice.

I found the concepts taught somewhat interesting, and personally spent a lot of time to wrap my head around the concept of linear independence and how it all ties into matrices and connects to the numerous different properties taught. I had fun figuring stuff out and I think this is definitely more enjoyable math class than Calculus. I thought Prof. Wang Fei’s lectures were great as well.

CS3245 - Information Retrieval


I took this class in AY23/24 Sem 2, it was taught by Prof. Zhao Jin.

TLDR; CS3245 is a pragmatic class about how to build text-based search engines. It has simple weekly Canvas quizzes that test your understanding, weekly (non-compulsory) tutorials, 4 homework assignments where you build your own toy search engine in Python, no midterms, and a (relatively simple) final exam. The workload is not that heavy, and the difficulty was not very high in my opinion.

Notable topics

  • Scalable and tolerant index construction for boolean retrieval systems
  • Ranking with vector space model
  • Evaluate the effectiveness of a search engine with precision-recall
  • Probabilistic info. retrieval

You can find all the specs of this class on the course website.

Chill class about building search engines

I thought CS3245 was quite well-designed module. It was somewhat complexity-averse, in the sense that discussion about certain topics ended the moment they got a bit too complex (in the interest of time). I wish that there was more time allocated to discuss probabilistic info. retrieval specifically. Easier topics could have been compacted and taught more quickly, and there were random bits of information that just felt “extra” (A/B testing, the entire web crawling chapter). Overall, the content was interesting, but it felt a bit unfocused and at times.

We were given 4 graded homework assignments which were quite evenly-spaced out. You can choose to work on it alone or in pairs. I worked on them alone. The main focus for these assignments was to iteratively build a Python text-based toy search engine. There was definitely ample time to fulfil the basic requirements of each assignment, and we were given quite a lot of freedom to choose and experiment with different concepts (kind of scalable index construction strategy we want to use, whether we needed compression, how we wanted to weight/rank our results) in building our search engine.

Getting the “base” search engine working was really quite trivial, especially if you are already well-versed with Python. I was never really stressed about it and enjoyed working on the assignments a lot actually.

Overall, this class was a good introduction to search engines and information retrieval concepts. It was quite enjoyable!

CS3230 - Design and Analysis of Algorithms


I took this class in AY23/24 Sem 2, it was taught by Prof. Diptarka Chakraborty, Steven Halim, and Sanjay Jain.

TLDR; CS3230 equips you with the concepts and vocabulary to think and reason about decisions you make when devising an algorithm. It has weekly lectures and tutorials that you really should not miss out on, 3 Written Assignments, 3 Programming Assignments (Kattis), Midterm and final exams. The workload is high, and you should expect to really put in a lot of thought and effort in all components of this course.

Notable topics

  • Asymptotic analysis
  • Divide and conquer
  • Random algos
  • Dynamic Programming
  • Greedy
  • Amortised Analysis
  • NP-completeness

Underrated course

Needless to say, I found CS3230 very challenging from start to end. I found it cool that concepts taught genuinely helped me to reason about algorithm analysis more fluently during coding interviews, definitely feeling a lot more confident going into technical interviews after taking this class. The proofs were not as formal as in CS1231S and CS2040S, but definitely still very rigorous. While the course is definitely very intense, I found that the assessments accommodated for students at different understanding levels very well, there was never a moment I felt completely and utterly lost.

I complemented doing CS3230 with consistent leetcoding and found that I was able to reason about the intuition behind different approaches with more clarity. An underrated course in my opinion.

CS2108 - Introduction to Media Computing


I took this class in AY23/24 Sem 2, it was taught by Prof. Ng Teck Khim

TLDR; CS2108 is an introductory class that teaches useful concepts and ideas that are used in audio/image processing. It has weekly lectures (that aren’t recorded) and tutorials (that are submission-based), a course project, and a finals exam. The course is taught by Prof Ng in a very relaxed manner, and is very easy to “get lost" in. The workload is actually not very heavy, but the concepts taught can be hard to understand.

Notable topics

  • Fourier series, Fourier transform and Convolution.
  • Sampling, 2D Fourier transform (for images).
  • Correlation (was not covered in my run of the course, but I ended up learning about it for my assignment).

Into the frequency realm…

I found myself struggling to follow the lectures at certain times and had to do A LOT of self-studying. I think this is because Prof. Ng explained complex concepts at a very high-level in a very hand-wavy manner while showing presentation slides that lacked visuals.

It was very hard to follow along by squaring the concepts he was explaining with the massive formulas on the slides. I thought that more could be done for the presentation slides to complement more visual learners like myself.

  • I think it was good that Prof. Ng actively sought to re-explain concepts when he sensed that we didn’t quite follow, he was very patient in re-explaining things properly.
  • On this note, I have also decided to compile and make public a bunch of resources (YouTube videos mainly) that do a great job at visualising and explaining concepts like FFT and Convolution.

I found the MATLAB tutorials quite fun. They were helpful in getting myself to understand the practical aspects of the different concepts taught. Tutorial submissions are graded anyways so you have to do them!

  • Prior to taking CS2108, I had no experience with MATLAB. I found ChatGPT extremely helpful in learning how to write MATLAB code for tutorials and the assignment.

The course project was pretty fun. Not difficult to do the bare minimum. Prof. Ng encouraged us to do something creative with frequency analysis that involved interpreting whistling tunes, so I decided to make a Matlab program that analyses bird songs and tries to identify birds with simple frequency analysis.

Conclusion

Overall, I gained a decent understanding of useful concepts like FFT and convolution (these topics are why I took the course) and learned how to apply them at a primitive level. The topics are interesting, and while the slides/resources are lacking, I had fun figuring stuff out myself anyways. If you are genuinely interested in FFT and/or sound/image processing, go ahead but be prepared to put in effort!

CS3223 - Database Systems Implementation


I took this class in AY23/24 Sem 2, it was taught by Prof. Chan Chee Yong

TLDR; CS3223 is as-advertised, all about how databases work. It’s good for people who are serious about getitng into the specifics of databases. It has weekly recorded lectures and (compulsory) tutorials, 3 Assignments, a midterm and final exam. The workload is moderate, but it is extremely content-heavy.

Notable topics

  • Indexes
  • SQL query evaluation
  • Transaction management

You are the Database System

CS3223 is very content heavy. It’s akin to CS2106 in that the content is broad and specific— with lots of different variations of specific algorithms you have to memorise and apply during the exams. The course is mainly centred around PostgreSQL and seriously goes deep into specifics about the way data is stored and accessed, how queries are evaluated and optimised, and how they are abstracted into transactions, and then how these transactions are managed. The first assignment was quite difficult, but subsequent assignments were more do-able. The tutorial questions were good and attending tutorials really helped with my understanding.

Overall, I think CS3223 was moderately difficult and quite content-heavy. It was arduous at times, but looking back now, I think it’s a pretty decent module actually. I definitely walked away with a better appreciation for the happenings under the hood of Postgres.

Tags: