Skip to main content

5 posts tagged with "NUS"

View All Tags

· 6 min read

Thoughts

This semester has been intense. Much of the stress I attribute to the heavy workload of CS3216. It has indeed lived up to its reputation and I am just glad that it's over. Other than that, I am happy with my selection of modules this semester. Many of them turned out to be modules that I would recommend or won't mind doing. Note that my reviews below are not meant to be comprehensive but just my random thoughts.

Module Review

CS2102: Database Systems

Before taking this class, I had a surface understanding of SQL and databases based on my previous experiences doing web development work. There was a time when I first started working with MySQL and had to create database schemas, I was lost and so wanted to take a proper introductory module about databases. Now that I have taken this introductory-level database module, I do appreciate database systems more and have a better idea of the syntax and the power of SQL. In this module, I learned about the design and analysis of relational databases. We started with learning about ER diagrams to capture the requirements of a database application. With that, we explored SQL statements to define the table structures and query from the database. Advanced features such as triggers and functions were also covered. For the second half of the semester, we looked into analyzing the redundancy and dependency preserving properties of database schemas. Functional dependencies, BCNF, and 3NF were also highlighted. I went through the first half of the semester barely wrote a single line of SQL. That was a poor decision and I only came to appreciate SQL better when I started to work out the lecture examples and tutorial exercises. Overall, I would recommend this module as a great source of general knowledge about databases.

CS2105: Introduction to Computer Networks

The computer network is something that I often treat as a black box. In rare times when I had to fix my internet connection or try to configure my router, I realized that I hardly know what went on in these much-needed devices. This module does a quick overview of the five layers of the internet protocol stack. The content is not math-intensive nor difficult to understand. The assignments could take a while to figure out how to handle the input/output as we had to create programs that somewhat simulated how UDP/TCP server operates. But, they are at a reasonable difficulty and could be solved before the deadline. An important concept that I learned from it is about the reliable transfer of data. Given the unreliable channels of communication, how can we create a protocol that delivers data efficiently, securely, and without errors? It is amazing to me that mechanisms such as sequence number, ACK/NAK, a timer can provide a simple solution to these hard problems. Of course, the details are more complicated in real-world systems. I feel that this module provided me with a rough idea of how certain difficult problems have been solved in practice. For example, how IP addresses can be used to identify the hosts in the network across the globe. Overall, I would say this module's workload is reasonable and not extreme. While content can be technical and plain at times, I do think that it's good to know about them even if you don't remember all the details afterward.

CS3216: Software Product Engineering in Digital Markets

I have posted my reflection about this module here. To say the least, I think different people will experience this module differently. It was a good challenge that I decided to take on and I was fortunate enough to participate. Even though this is a 3K CS module, I learned more non-technical knowledge from the prof, the TAs, my peers, and the various invited speakers. Overall it was a good run and apply if you want a challenge too.

CS3243: Introduction to Artificial Intelligence

I borrowed the textbook for this module and indeed CS3243 only covers a selection of topics in Artificial Intelligence. I find this module interesting as I am sure many will agree, simply because it's just cool to learn how we are going to build intelligent agents with code (and also the hardware). Starting from searching with heuristics to Constraint Satisfaction Problems (CSP), I learned about how solutions can be discovered by representing them well. Later topics such as MDP and Q learning showed me a way that we can build programs to explore and learn. The projects were fun to work on and the course was well-organized. Overall I will recommend this module!

CP3108A: Independent Work

I took this module as a way to consistently contribute to Open-Source projects. In my case, I worked on MarkBind, a tool for generating content-heavy websites from source files in Markdown format. It is also the tool behind the course website for CS2103T. I have my progress report available here. I am happy that I took this module and was given an excuse to properly learn an unfamiliar repository and help to resolve pending issues. It could be somewhat boring if you just want to build features. I spent most of my time trying to understand the code and experimenting with solutions to solve an existing bug. It was also a good practice for me to write my PR descriptions properly and document my code well. Some fun that I had doing this module includes finding out how absurd the idea of Open-Source can be. While we all know the collective effort can bring us to greater heights, relying on someone's passion to contribute without any potential reward is almost against human selfish nature. There were a few times that I ran into old issues in OSS repositories where the author had moved on and the rest of the world still keep on asking questions and wanting help with certain packages. It is not uncommon to see abandoned packages lying around. The workload for this module is reasonable as Prof Damith who is in charge of monitoring your progress provides a frequent update to let you know how much work is needed to fulfill the requirements. Overall, I will recommend taking this module if you want to explore OSS.

GEQ1000: Asking Questions

It is a required university-level module so I took it to clear my graduation requirements. While I admittedly did not spend much time going through the materials, I would say that the module is well structured and conducted professionally. Topics from different disciplines are covered to promote learning about all aspects of questioning. There are many pre-recorded video series to watch as part of the weekly lecture (it seems fine to skip them). The bi-weekly in-person tutorial is very manageable. The tutor for my group was able to facilitate the lesson well. Overall I think this module is low maintenance and well organized, suitable to take it in a semester of high workload (this module is pass-fail-based).

· 4 min read

Goals

Here is a mid-year update to the goals that were mentioned in my "hello world 2020" article:

  • Secure one summer internship (or NUS'CVWO)

I managed to secure both NUS CVWO and an internship position at a local startup (I chose to go with the latter).

  • Continue to write CS & web dev related stuff (at least on a Bi-weekly basis)

I wrote an article or two and had a few in the pipeline, but did not follow through with the promise of bi-weekly publishing. I need to reconsider this due to my other commitments.

  • Be great at one module each semester (aim to TA for it)

I am fairly happy with what I learned in CS2103T Software Engineering, though I can't say I am great at it (result unknown as of now). I started to be active in the class forum right after midterm and that was fun. There were interesting discussions and I benefitted from peer learning.

  • Put in efforts to develop one of my ideas to fruition

I am excited to start working on my ideas in the upcoming summer.

  • Do one open-source project

Same as above, looking forward to contribute to possible open source projects under NUS in the second half of the year.

  • Be wholesome and happy while doing the above:)

School

Maybe it's time for me to write reviews for the modules that I have taken:

CS2100: COMPUTER ORGANISATION

Low level stuff that computer science students might be interested to know. Lot's of 1s and 0s. Overall an interesting module that has a somewhat similar vibe with CS1231S Discrete Structures. Most content can come off as surprising and complex at first glance, but once I start to get familar with the topics, things like control, MIPs instructions and other binary stuff seemed less scary. Certainly not a module that I mastered, but I feel that the information in the module is good to know.

CS2101: EFFECTIVE COMMUNICATION FOR COMPUTING PROFESSIONALS

A compulsory communication module paired with CS2103T Software Engineering. Focused on class interaction, group presentation and ended with essay writing. Because of my tutor's enthusiasm, it was easy to participate in class. The opportunities to practice group presentations served as great way to receive constructive feedback on individual communication shortcomings.

CS2103T: SOFTWARE ENGINEERING

My highlight-of-the-semester module and I think it has an excellent coverage and great delivery. The course taught me things that software engineers should at least be aware of. This include UML diagrams, test case design heuristics and things like software project management. I would say it is fairly comprehensive and I picked up lot's of nuggets of wisdom that could possibly help in my future software engineering projects. Prof Damith and the teaching team were considerate and responsive.

The module also served as a playground to create and contribute to small to mid size code bases. The collaborative nature meant that one has to work with their team mates and participate in a range of team activities such as weekly meeting and peer review and discussion of issues as well as pull requests.

ST2334: PROBABILITY AND STATISTICS

Another compulsory math module for CS students. Builds on top of JC H2 Math Statistics knowledge. Pretty much self-study.

DMY1401TT: DESIGN YOUR OWN MODULE (Machine Learning in Practice)

Not as expected and I could have self taught the content provided. Mostly surface level stuff with some in-depth knowledge that was communicated at the surface level.-.

GER1000: QUANTITATIVE REASONING

No intention to put any efforts into this module and going to SU.

IS1103: ETHICS IN COMPUTING

I understand what this module is trying to do and appreciate how it at least requires minimal efforts each week. I won't explain much because of the super low workload.