This is a retrospective of the second semester of my second year at NUS. It was a relatively relaxed semester, with me taking 5 modules that resulted in a very manageable workload. In some sense, I would also say that perhaps I got used to what needed to be done.
CS3281 Thematic Systems Project I (aka Open Source Mod)
This was my highlight-of-the-semester module, and I truly enjoyed it 😄 (Kudos to Prof Damith for keeping the module alive by volunteering his time to deliver this module!) It taught me a lot about open-source development. Even though the project that I worked on is by no means a large-scale, well-established one, in some way that provided autonomy and a whole range of tasks to tackle. As someone who has taken CS3216 (aka Go build software projects mod), I would say the learning outcome is different, but this module is equally worth doing. Summarizing some of my thoughts on the module:
- You get to work on an open-source project!
- You get to participate in the routine tasks of an open-source project, such as raising (and triaging) issues, fixing bugs, reviewing PRs, improving documentation, proposing new features, and discussing implementation details etc.
- The projects are generally well documented; or have rich context from the git history and public discussion in issues and PRs.
- The project mentors will be very helpful and you will get to learn from them through PR reviews and discussions.
- When you spot the not-so-good parts of the projects, you have the chance to improve them.
- Working on school-based projects also lends you the opportunity to work with other students, as well as external contributors and even on external projects (especially upstream dependencies).
I spent a fairly consistent amount of time working on MarkBind, as you can see in the contribution graph:
You can find out about what I have done (my progress and knowledge-learned log) here.
One thing I learned about OSS: if you want to be a contributor, first become a user. That leads to so many opportunities to contribute, and new perspectives to look at the project.
CS3230 Design and Analysis of Algorithms
This module is what you would expect in an advanced data structure and algorithms class. While the concepts may be difficult, they turned out to be pretty interesting to know. I enjoyed learning and analyzing the algorithms, which were all quite fundamental. There's some stress from the weekly graded assignments, but in general, it was manageable.
CS3240 Interaction Design
This module provides a good introduction to the field of interaction design. It covers topics such as user-centered design, usability, and accessibility. It's a good survey of the field, and it was a more design-oriented module than the other CS modules I have taken. Workload wise if you don't like working on wireframes, and prototypes on tools like Figma, it can be a bit of a drag. I personally had many occasions where I opened Figma and just can't get myself to work on the assignment. But I did enjoy the module and my output, which you can find in the write-up here.
ES2660 Communicating In The Information Age
This required module focuses on the theories, techniques, and skills related to effective communication in the context of Information Technology. It covers topics such as critical thinking, public speaking, and writing, and provides opportunities to practice these skills through tutorial activities and assignments. The workload is manageable, and the classroom atmosphere is relaxed.
One thing that I remember most about this module: the challenge of speaking impromptu on a given topic (Not that easy if you want to do it well).
(bonus: here's the guideline I used for impromptu speaking)
- Essence of the prompt (Context, audience, purpose)
- Stand (Agree, Disagree)
- Key terms
- Reasons for my stand
- Delve deeper(Consider alternative, consequences)
LSM1303 Animal Behaviour
Pretty chill and fun module with an awesome prof (The Otterman!). It was a great gateway to learning more about animals, and even got to observe them out in the wild.