What I Hope to Learn in CS3216
August 11, 2013
Having taken CS3217 before, I understand that CS3216 is unlike most CS modules, the learning curve is extremely steep and students are expected to turn from zero to hero in a span of few weeks. CS3217 caught me off guard; I literally spent every single day coding and learning Objective-C, severely losing sleep, hair and my sanity.
I know many CS3216 alumni and heard their experiences about the module and the hard times they have gone through. Why do people put themselves through so much suffering and hardship when there are easier alternatives around? It is because stretching myself to our limits is the fastest way to level up. We all are equal in the sense that everybody has an equal amount of a limited resource - time. Hence we have to optimize our time and spend it in a way that we enjoy and also gain the most out of. For me, I believe that coding is the right field for me where it is the sweet intersection of something I enjoy doing, can make a living out of, and am good at.
Wearing Multiple Hats
I spent a year interning at a startup in Silicon Valley doing iOS and front end web development. Ironically, many of the skills that required for me to succeed in my internship were not taught in school. We were not taught to maintain development and production environments; neither were we taught to work with coworkers from other departments. These are also skills beyond school context that are valued in the industry, hence it is important that we learn them. CS3216 is special in the sense that it accepts students from all faculties as long as they have the relevant interests. I launched Corspedia together with a friend, Weiqing Toh, in late July. Corspedia is a search engine for CORS bidding history and takes the pain out of navigating the horrendous CORS bidding archives interface. It was popular among NUS students and we had 1000+ active visitors each day. For Corspedia, I was the designer and front end developer. Both me and my partner participated in the product design were actively discussing what features to add for the next release at the end of the year. I believe an important criteria to succeed is to learn to be versatile and take up many roles. I'm here to learn to wear multiple hats and get my hands dirty on things beyond coding. I would also like to participate heavily in product design, product direction and project management.
Update 2021: Corspedia's bidding stats have been integrated into NUSMods' module page as a first-class feature.
Working With People
I'm not new to web development. It's weird but I enjoy writing HTML and Markdown syntax. I get a sense of satisfaction from seeing markup being transformed into rendered layouts and elements. It is also awesome to be able to create useful softwares that reaches the hands of people right from my personal laptop. But software is rarely the work of a single person. I enjoy working in small teams with trusted programmer friends to hack out something cool together. I used to enjoy hackathons, participating in almost every that I could while I was in Silicon Valley. I have grown to realize that my time was better spent working on longer-term side-projects, rather than small hackathon projects which would end up abandoned after the hackathon event. We are forced to work with different people for the various CS3216 assignments, and this will train me to adapt to different working styles.
Leveling Up (Fast)
Technically speaking, I'm a Year 4 in SoC but the truth is that I have only completed 5 CS modules so far. That is because I started university majoring in Mechnical Engineering but I grew to love programming after taking a compulsory introduction to programming course in my first year (CS1010E). I found myself spending more time on coding than my mechanical engineering modules. I didn't really understand what I was studying in ME and I was familiarizing myself with question patterns rather than understanding the concepts in order to clear the exams. In the end, I took a gamble and applied to switch courses after Year 2 Sem 1. My results were decent enough and I had a recommendation from Dr Ang Chuan Heng whom I worked for while serving as a Teaching Assistant for CS1020E. In the end, I could switch course and even keep my NUS Faculty Scholarship. It was too good to be true. I haven't enjoyed school so much in my life before.
But this also means that I was behind many of my peers. I have to work doubly hard in order to make up for the lost time. As warm up for CS3216, I coded this static site blogging engine using AngularJS, called Luna. I'm a front end guy, I dislike using command line interfaces and dealing with databases, hence I was fascinated by static site templating engines. I was inspired by Jekyll and Empress, which are static site engines that generate HTML pages from markdown files. Luna is more flexible to use compared to Blogger and Wordpress (mainly because I built it) as I only have to write the blog content in markdown and run a python script to generate the content in JSON. I also happen to like to customise my own sites and I quite enjoy using this so far! (:
Update 2021: I've migrated this blog to Docusaurus, which is also a static site generator built by me.
I will probably not get another chance to improve rapidly in web development in school if I don't take CS3216. So why not?