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.
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).