Learning Through Mistakes

Just came back from a CS3216 talk¬†on Growth Hacking by Zopim’s Bjorn (very cool name I swear) and Wei Xiang. It was a pretty inspiring and relatable talk especially after I completed an internship at a growing startup.

One of the more relatable point that was mentioned is learning through mistakes. Several questions were brought up on rewriting the tech stack and choosing the right stack from the beginning. I think Wei Xiang did a great job addressing these concerns that us budding software engineers often have. While there are really ways to learn by RTFM (Read the F-ing Manual), some things can only come with experience. Going through the process of making a mistake and recovering is actually the best process of learning. This gives me more confidence that what I’m doing for my project technically is correct (even though it might be all the wrong decisions made, but at the end of it I’ll learn something).

CS3216 is really fun, but I’ve been neglecting my other modules. Should probably start to take school a bit more seriously. I have no regrets taking this module so early on though. Skills acquired here will definitely be of great value!

Fingers crossed that all will go well! ūüôā

(Second post this week in CS3216 blog because I think it was worth documenting)


Week 2 Reflections

Ideation is tough. Our team spent most of the time finalising our ideas for the first assignment and decided to build a social app for the NUS community. Of course there were certain disagreements among the team but I’m glad that it was resolved in the end.

Logically, the next step after ideation was to set up our wireframes. However we did not do that promptly since we didn’t really know what to do. I think we were still unclear of the main features that we want and therefore a delay in coming up with wireframes. It wasn’t until end of this week that we finally started to get some wireframes out, and a frontend skeleton for us to work with.

This can definitely be improved on. We should have started with the wireframes earlier instead of going in circles about the features that our app should have. With a wireframe, it is easy to add additional features and extra components.

Our backend developer, Xinan, was really fast though, the API is already setup and running.

Several new technologies I’ve been exposed to this week include ReactJS, the Flux architecture, webpack build system and also ES6. These are really new and exciting frontend technologies which are being used more and more frequently. Really grateful to have Yang Shun help us out by explaining to us some of the frontend architecture and concepts. Coming from a server-side rendering to building a SPA is kind of overwhelming.

The main takeaway from this week (and assignment 1 so far) is to set up wireframes the moment an idea is formed. It’ll be easier to discuss about the features and iterate on the design. As Su Yuen mentioned in her UI/UX workshop, it will be easier to do user testing (using the wide array of tools that we have online today) and also iterate on the design concurrently.

One of the main goals of next week is to optimise¬†my learning speed, and push out the MVP ASAP. The speed at which I’m learning things is too slow and I should really be doing things at a faster pace. I took a whole week just to understand React and Flux.

But having said that, I’m glad that I chose a framework that I’m not familiar with. At least I’m constantly upgrading and learning new things while executing. It offers me a different perspective on how things are being done and I’m looking forward to seeing more of such things! (Not at the cost of the product of course)

CS3216 – Week 1

Some of the major takeaways from this short week:

I think it was emphasised extensively in class that execution is the most important step in this module. The ability to turn an idea into a tangible product should be the key takeaway from this course.

The module was started based on a simple idea: To see what happens when the best students are put together, and made to suffer. The idea that I am amongst people with stronger technical background as me is really exciting. I would not want to stay in my comfort zone for too long since “if you’re the smartest in the room, you’re probably in the wrong room.” I believe CS3216 is the right room for me right now. (Although I’m not usually the smartest in other rooms)

The workshop this weekend was to teach us how to setup an AWS EC2 instance. Comprises mostly of simple clicks and I finally got to understand chmod properly. This should be pretty important for my other tasks.

My group for assignment 1 consist of Xinan, Mingyu and Karen. We came up with a few awesome ideas but still haven’t got down to executing it yet.¬†Do not waterfall¬†was the tip given in the assignment specifications. I hope we can get down to building the product soon.

Another thing I wish to keep track is the number of hours of sleep I get per week.¬†The first week was a whopping¬†40 hours. Let’s see if this number will start to decrease (and eventually hit zero) in time to come.

What I Wish To Learn In CS3216

It was requested that each of us CS3216 student create a new blog and write about what we wish to learn in this module. I think I would’ve done the same even if there wasn’t such a requirement. What’s more interesting¬†than to document the process of learning?

I’ve heard stories about this module. Both good and bad. About how sleep will be sacrificed, about how it’ll be so worth it¬†after the module is done with. To me, pain has always been in connection with learning. Painful learning is what I call it and it has been the way ever since I step foot in NUS. Hopefully, I’ll enjoy another semester of¬†painful learning.

I’ve just finished my freshman year, so what am I doing taking a module that’s meant for mostly year 3s? I would admit that my other modules weren’t really boring me. I still find¬†algorithms interesting, and functional JavaScript a beauty. But they did not excite me either. CS3216 gives me a project of my own, a playground of thoughts (and of course lots of code) to let me develop something I can truly call my own.¬†Putting my small side projects aside, building something from scratch for production level is something I wish to experience.

That was a really general idea of why I’m taking CS3216. But here are the specifics, here are four¬†things that I wish to learn from CS3216.

Business Idea Pitching

It’s easy to be comfortable with just coding and leave the pitching to those who know how to talk. As a programmer/developer, that may seem ideal. Hell, in a way this could be a¬†design pattern, where each function does one thing and one thing only. However it is also important to be able to let our thoughts and ideas be heard. If an idea cannot be explained in simple words, imagine how would the codebase look like in the future.

The ability to wear multiple hats is pretty important. In other words, I wish to be more versatile and not only be able to code, but to be able to present my ideas and thoughts well.

Deployment practices, and anti-patterns

Coming from a frontend background, I’ve been only exposed a little bit to DevOps and deployment processes. Now that a project has to be deployed on Amazon Web Services for full production scale, I would want to set things right and follow the common conventions. I’ve read this article that mentioned organization rather than technical being the most important skill¬†in software development. Writing code that works is important, but to grow and further develop a product, the initial codebase has to be well organized. CS3216 gives me the opportunity to start something right from scratch. To write clean, scalable code. (Well, I’ve been told that this state of codebase is a unicorn, but that doesn’t mean we shouldn’t try)

What it means to be full stack

In CS3216, I wish to be able to touch on every layer of the tech stack and contribute in ways more than just frontend. Dealing with mostly frontend development during my internship, I long to have more hands on experience with the other roles of web development such as databases and cron jobs. At the same time, I would want to perform at the same level of competence for frontend.

This should give me a better idea of what it really means to be ‘full stack’.

Expand my toolbox

Currently I’m doing a Rails tutorial on railstutorial.org, to add on to my toolbox. Of course I wish to add a few more frameworks and tools to my knowledge bank over the course of this semester. Expose myself to more ways that things are being done and understand the pros and cons. That’s why I pretty much like that we have 3 major assignments in total. Gives me the space to play with three different technology stacks as I wish.

Last but not least, I would love to create something so awesome and kickass that people actually want to use. This should be my main goal of this module. To come up with a polished product that could potentially be used by thousands of people.

Here’s to a semester of awesome fun and lack of sleep!