Month: August 2017

Week 2


The first and second lecture for CS3216 have concluded. Admittedly, I have learnt nothing new from these 2 lectures.

For the software engineering related content, they have mostly been covered by CS2103 and CS3217, as well as through self reading and past SE experiences of our own.

As for the motivational speeches, I believe most people in this class are already sufficiently self-motivated for these speeches to have any further effects.

Lastly, for the course administration, the course website has already documented them clearly, therefore regurgitating them during lecture is not an efficient use of time.

All in all, the lecture content can be more concise and the lecture duration can be shortened.

Assignment 1 Idea

My group has embarked on our assignment 1 and I have finalised my project grouping for assignment 2.

The first stage of the project is ideation. We each did our research separately and came out with 2-3 ideas individually. Next, we met and discussed on the merits and potential pitfalls of every proposed idea. Lastly, we voted to identify the top 4 most popular ideas. We then concluded our first meeting so that we can have time to think about the 4 ideas and perform further researches on them. We met again the next day and every member was given a chance to voice their opinions and concerns about each of the 4 ideas, and after a lengthy discussion, we unanimously agreed to work on one of the idea.

The idea we have chosen is NUSEats, an app that compiles real time information about canteens and restaurants around NUS, such as opening hours, available dishes and crowdedness. The app will also incorporate social features such as broadcasting one’s intended lunch location, calling out/inviting friends to join for lunch etc. Other features of the app include opinion polls such as best modules to take, best lecturers etc.

Assignment 1 Team composition 

  1. Jovin Liew: UI/UX designer/business person
  2. Charlton Lim: Back-end developer
  3. Ho Yihang: Full stack developer
  4. Wang Riwu (me): Full stack developer

Assignment 1 Technology stack

For the front-end, we unanimously agreed to use React.js + Redux. The discussion on the merits of React and Redux shall be deferred to future posts when there are practical examples to demonstrate their apparent benefits.

For the back-end, even though Charlton is only experienced with Java/Spring Boot, he has agreed to learn Javascript/Express, as it has the advantage of enabling switching between server-side and client-side rendering (See also: Isomorphic Javascript) and is less verbose than Java (among various other advantages which I shall skip in this post as it might take a month to list them all).

For the database, Yihang initially suggested MongoDB but I recommended MySQL as RDBMS would allow clearer management of our data relationships, easier data normalisation to enforce data integrity and reduce data redundancy. In the end, we settled with PostgreSQL as Charlton is more familiar with it and there is not much practical difference between MySQL and PostgreSQL for our use cases.

What I hope to learn in CS3216

Mastering the Redux architecture

As I have painfully learnt from my past experience, managing states in a complex ReactJS application is no easy task.

Without a framework, it can quickly spiral down into a complete state (no pun intended) of mess, where one loses the delicate understanding of when and why some components are updating, potentially leading to programming by coincidence and increasing the difficulty of debugging the application, not to mention the performance penalty of unnecessary re-rendering.

While the Redux architecture is by no means a silver bullet in overcoming  the complexity of data flow and state management, it can at least alleviate the problem  by making state mutations much more predicable and debuggable.

Through the projects in this course, I hope to become more familiarized with the Redux architecture, especially with regards to dispatching asynchronous actions and deploying middleware to handle asynchronous data flow.


UI/UX design

In iOS development, the Cocoa Touch framework serves as the standard in creating the interface views and components.

In web development, unfortunately, we are not blessed with a clear cut choice.

My past reliance on Twitter Bootstrap might not be optimal for every circumstance, and seemingly arbitrary decisions are often made with regards to the styles and layouts of components.

Through this course,  I hope to develop a systematic and efficient approach in designing good UI/UX.


Back end and database design

A well designed back end, with normalized database and performant SQL queries, is critical in ensuring the scalability, reliability and security of the web application.

This course will no doubt help me to improve and refine my API and database design skills.


© 2024 Course Reflection

Theme by Anders NorenUp ↑

Skip to toolbar