Many of us were drawn into majoring in Computer Science by the wonders of what technology can do in our lives. Often, our well-meaning seniors would give us advice on how best to live these four years. A common thread we hear is the value of spending our free time learning new technologies and working on various side projects to give our portfolio that extra edge.
Don’t just spend all your time on school work. CS is all about doing things yourself, figuring things out without much official help. Hack around whatever thing you like. Remember, the goal is learning. You can’t learn with just textbooks alone. You must learn by doing. ~ Senior’s advice from a Computer Science interest group at NUS (NUS Hackers)
When I first heard this advice in my freshman year, I got addicted to the idea. Independent and out-of-school learning was something that I had always cherished. However, I was also conflicted about how this advice would make sense alongside the assigned classes in university.
No doubt, a reputable educational institution will offer us what we have paid for – access to prestigious internships and a credential to help land that coveted job. Yet, for a technical major like Computer Science, many learning resources are easily available online on free platforms like Coursera and EdX. If I could learn so much about Computer Science from the internet and from my own side projects, then what was the value of my pursuit of classroom learning?
Starting Out: Lost #
I entered this major tabula rasa, not knowing what software looked like or how to even write a single line of code. Fresh out of the introductory programming classes, I was excited to start my first side project in the summer of freshman year. Unfortunately, this experience was fraught with a lot of frustration and feelings of inadequacy. Each time I faced an issue with the application that I couldn’t resolve, I would resort to deleting the existing application and remaking everything from scratch. (Note: Don’t ever do this!)

Edit history of our project. I was constantly deleting and remaking the entire project. “pikulet” is my username on GitHub, a social media site for sharing one’s coding projects.
In the end, while I was glad that we managed to complete the product, I didn’t learn as much from this project as I had intended to. One key issue was that there were no feedback channels or help available. For an amateur who was clueless about everything, it was challenging to know if I was going in the right direction. I recall the immense frustration at spending ten hours figuring how to make the QR scanner work, only to reset the application the next day because it wouldn’t run. All these problems made it difficult to stay motivated in learning new technologies independently, and I also saw my own attitude towards the project change from love to hate. Was this inability to work on side projects a result of my lack of skills?
Over the span of the next few semesters, I took many classes in school. Indubitably, my programming skills improved. Yet, I ironically remained slow in starting my own side projects. At this stage, I knew how to do things but lacked the foresight of what I wanted to do.

There is a wealth of resources on programming projects. However, they would often feature the same few projects that don’t have any real-life usefulness to me.
I found myself frequently googling for “best programming side projects” that I could do, but these lists would only contain cookie-cutter project ideas like BMI calculators and to-do lists. Nothing that piques my interest. Clearly, it is not skills alone that are lacking – I was now in an entirely opposite position, where I had the skills but no motivation to start projects.
The Turning Point #
Later in my sophomore year, one my modules required us to work on a search engine for legal documents. With my group of enthusiastic friends, we quickly completed the baseline project requirements, which would have given us close to a full score on the project.
With additional time on our hands, we then worked on the optional open-ended component, which required us to propose and build extensions to the baseline project. Eventually, our projects would be sent to a Legal Tech company (Intellex), and the company could opt to buy our work. Motivated about the real-world impact of our work, we set off doing in-depth research on search engines. I implemented the indexing system of the project, which would use auxiliary factors like the court type, country and date to decide on a legal document’s relevance. In the end, I left the module with a very comprehensive understanding of the cogs that turn search engines.
Unfortunately, for many employers, projects that stem from a school module are not valued highly because they do not reflect the independence and creativity of a side project. Yet, for me, it is precisely because the project was an extension of assigned work that my learning was enhanced. I was able to tinker in a semi-structured manner, building on the big ideas learnt in lectures and the hands-on experience I had with the baseline project.
I learnt a lot more technical skills in this school project than the summer side project, even though this project only spanned a shorter time. For a novice programmer where there was simply too much I didn’t know that I didn’t know, a structured exploration was more beneficial to my growth. Looking back, I’m thankful I didn’t just stop at the baseline project and choose to spend my free time on another side project instead.
Working on this school project made me understand how well I took to semi-structured learning. I realised my approach to side projects, could be more structured. Instead of looking at guided projects as boring and useless, I started to value their importance in the learning process. This realisation made me take a drastic turn in my approach to side projects – instead of waiting for an interesting project, I went through the hard basics. Cookie-cutter projects were my go-to for awhile, and I would religiously follow online tutorials on Youtube to make replica applications in a step-by-step manner.
Gradually, as I grew more confident, I was able to infuse my projects with my own style. Last year, I had to prepare for an interview at GovTech by creating a URL shortener project. Armed with hands-on knowledge in Python and Web Applications, I was able to navigate my way through a tutorial for a personal blog forum. I selectively followed the blog post tutorial to create the URL shortener, using a new technology I had just picked up over the weekend.

The tutorial I followed was for a personal blog forum. Image credit: Flask Mega Tutorial by Miguel Grinberg.

I selectively followed the blog post tutorial and reworked the code to make a URL shortener.
The project was a personal breakthrough and not only because I had grasped the motion of working on side projects. The URL shortener included elements I had never learnt in school, such as a database and router. This achievement represented a milestone of no longer having to rely on structured learning for programming projects. Overall, my journey in juggling classroom learning and side projects has not only taught me technical skills, but also corrected my misguided ideas on learning how to learn.
Moving Forward: The narrative of Technology in my Life #
More recently, I took another leap forth and created a product that is not available anywhere else on the internet, creating a full-fledged word game from scratch.

This milestone represented a phase where I am no longer searching for a list of “best programming projects to work on”, but writing my own list based on my personal interests. Having this autonomy and ability to incorporate elements meaningful in my life in the projects I work on also keeps me motivated to learn more. I am now able to create technologies that are meaningful in my life – be they games or cryptographic projects. Moving forward, I hope to continue learning new technologies and one day, contribute to technologies that are important in many lives.