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 my off guard; I literally spent every single day coding and learning Objective-C, severely losing sleep and hair.
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 ours limits is the fastest way to level up. We all are equal in the sense that each person has the same limited resource: time. Hence we have to optimise 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 in 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 I picked up during my internship were not taught in school. We are not taught to maintain development and production environments; neither are we taught to work with coworkers from other departments. These are also skills beyond school context that are valued in the industry, and 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 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 are 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 and management.
Working With People
I'm not new to web development. It's weird but I enjoy typing HTML and markdown. 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 reach the hands of people right from my personal laptop. But softwares are 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 hackathon apps that I would trash 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 and found myself spending more time on coding than my mechanical engineering modules. I didn't really understood 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 course after Year 2 Sem 1. My results were decent enough and I had a recommendation from Dr Ang Chuan Heng whom I worked under 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! (:
I will probably not get another chance to improve rapidly in web development in school if I don't take CS3216. So why not?