All Articles

Why do you study CS?

Today, I felt like writing, and I also felt like reviving this blog that has been dead for over a year. Since it’s the start of another academic year here at NUS (school starts next week), I decided to write about something that would be a timely reminder to myself, and also something that would be useful for my readers (preferably the younger ones that are just about to start out in the amazing world of Computer Science).

Background

Here at the NUS Hackers coreteam, we receive all sort of interesting emails all the time. One very interesting email that caught our attention this year was this:

Hi NUSHackers,

I am a soon-to-be SOC student. I would kindly like to ask:

What would be the best way to prepare for my CS degree or even to join NUSHackers?

I am fortunate enough to have enough free time to study. I would be very grateful if you could point me in the right direction regarding where to start. I am currently doing some MOOCs. I also took a look at the CS syllabus and am preparing for the first year subjects. Some additional questions:

  1. What would you say is a more important part of cs (algorithms etc)
  2. What kind of projects would be useful to work on?
  3. How is the culture and environment like in SOC?
  4. What do you look for in potential members of your group?
  5. Is it possible to get internships during freshmen year?

Thank you for your time and attention. Looking forward to studying in NUS!

Cheers

(personal details have been truncated and I’ve obtained permission from the author to re-publish his email)

When I read this email, it reminded me of how I felt when I was a fresh freshman — going into a brand new environment, with no idea what’s really going on. There was always this mild anxiety and apprehension about what I should be doing, and if I am doing things right. I am back in school again, means I should be focused on studying and getting good grades, just as the Singapore education system has continually conditioned us to do right?

A year on, I can’t really say that I don’t think about these, but what I do know is that I sort of have a better idea on what’s important — and that is the why of things.

Email Response

So I told coreteam that I’d reply his email. And this was my reply to him.

Hello!

Happy to hear from an enthusiastic future junior. I am currently a freshman in CS, so I’d try to offer you some advice. However, please note that I may not offer the most sound advice.

Don’t be too focused on learning the curriculum / aiming to get good grades in school. What I recommend you to do is:

  1. Understand what CS is about (i.e. get a rough overview of what you are going to study): For this I recommend attempting a MOOC, Harvard’s CS50. This MOOC covers a good breadth and depth of what CS is about. I’ve seen many cases of people who enter CS because they hear the job prospects are good, not knowing what it is about at all, and then end up heavily struggling and finding out it’s not for them. Please don’t be like that.
  2. Set your context for your CS education: With your rough knowledge of what CS is, what is your purpose of studying CS in university? What do you want to achieve in life and how does learning CS help you achieve that goal? What is the type of impact you wish to create with CS?
  3. Try things and have fun: The answers to the questions in (2) will be unclear to many of us, but what I find helps bring clarity is simply to just keep trying different things you find interesting, tinker with things, and learn & have fun while doing so. By doing so, you start to figure out what you like or don’t like and have a better idea of what you are capable of making.
  4. Be engaged with the world outside of CS: CS equips you with a set of problem solving skills and a understanding of design principles. It is eventually still up to you to decide what you want to apply these skills and principles on and how. Being engaged with the world around you will help you to find a problem or cause that you are passionate about, that you can work on.

As for projects which you can work on, you can jut work on anything you find interesting / fun / useful. Just start. If you get bored, just move on. If you get stuck, try to figure out stuff on your own, and if you are still stuck, you can discuss your problems with our community at https://t.me/nushackers_chat.

As for internships in your freshmen year, why not? I know of many people who managed to secure internships even after A-Levels/ORD, much less your freshmen year.

Main thing is to have fun and enjoy what you are doing. As long as you are purpose-driven (not results-driven) and live life with intention, I’m sure you’ll be in good stead to enjoy CS and do well.

Chris

That was my reply to him.

I thought I’d spend this blog post expanding a bit on a few of the points I’ve made.

On the “computing bandwagon”

Welcome to the computing bandwagon! Whether you are here because you are truly fascinated by computers / programming, or because you have no idea what to do and the Graduate Employment Survey tells you that CS is one of the only few majors (other than Law & BZA) to have a median starting pay of over S$5k, congratulations! We are all in this bandwagon together now! I think what’s important that we ensure that this is a path that we want, and don’t mind committing to for almost the rest of our lives.

However, I’ve seen too many cases of people coming into computing blind, never bothering to find out what it’s remotely about. I don’t think this is advisable, because I’ve seen people who struggle a lot with the content in their initial semester, then finding out that computing might not be for them, and they end up all lost. Worse still, some don’t even put in the due effort in their computing modules to try to understand it, because why, “Computing is hard and I’m stressed, so let’s destress by continually committing to my hall/RC/other activities! I am a freshman so I should have fun!“.

Now, if you’ve read until this point, and you realised “oh no I picked CS and I have zero prior experience and I am starting school next week, means I am screwed right?“.

No, relax.

My point is: CS in NUS is tough. CS modules in NUS build on top of each other. Tough subjects need time and effort to build understanding. If you don’t give them the time and effort that they require, you will be eventually lost. Being lost is not good.

And it is not just understanding the subject. It is also about appreciating the subject. Only when you think about CS and it’s many branches from a bigger picture, then can you appreciate it as an elegant subject that is really about problem-solving and can see how it has links to all aspects of our lives today.

Give it some time, and give it the time you should give it. It will work out.

On trying things out

You go to a shopping mall to buy clothes. You see a beautiful dress. Looks amazing on the outside. Mannequin wearing it looks perfect. Do you just grab it and head to the cashier immediately? No right? You try it on first and see if it fits you well, before you decide to buy it.

Same thing.

You want to know if you like CS? The only way to find out is to try. What if you try it out and don’t have a good experience? Great! Then you think about why you didn’t like it, cross it off your list, and continue trying the next thing you wanted to try! Even bad experiences are learning experiences.

You and me, we are all still young. We have lots of time left. Spend that time going crazy and trying out different things!

Some examples:

  • In my first ever full-stack development experience when I was 15, where I was tasked to build a dashboard site for an energy company, I learnt that I am not superhuman and I shouldn’t dive into an part-time paid project with zero ounce of webdev experience. (I failed to deliver on this btw)
  • In my first internship with DSO when I worked on cryptography, I learnt that CS is not just about programming, but rather using computation as a tool to help us to solve problems, such as cryptanalysing ciphers.
  • In my second internship with DSO when I worked on AI, I learnt that even though I am an ignorant programmer who barely knew enough math/CS, I could just build on the work on others to write software that potentially had real impact on my country’s national security, and consequently on peoples’ lives.
  • In my last internship with Carousell, I learnt that as a software engineer, I had the power to create delightful, thoughtful, and performant software experiences which tens of thousands of users interact with every day.

The list goes on, but you get the gist: every experience, good or bad, allows you to learn more about what you are doing and learn more about yourself. It could potentially give you purpose, and give you your own narrative as to why you are doing things.

So let your hair down, go crazy, and try!

Learning

You might’ve realised a word I kept repeating in this blog post is “learning”. This is a word we see all the time, but do we really understand what it really means?

Quite frankly, I don’t have a definite answer to that too, but what I do know is: I am obsessed with learning, and I centre all my experiences around learning.

What I mean is, I constantly ask myself, “what can I learn from this?” for everything.

Some examples:

  • Had a great breakfast experience which made your day because the waitress smiled and was polite? What can I learn from this? Perhaps I should smile at others and be polite too.
  • Just had a bad graded presentation in school? What can I learn from this? Perhaps I should use more diagrams and less text, and try to engage the audience more.

These might be silly examples to you, but I hope it gives you a glimpse of my thought processes.

This is also how I manage stress and setbacks. I’ve found it to be strangely effective, because when you make a mistake and cause a screwup, by asking yourself “what can I learn from this?”, I find that I become a lot more focused on the “learning” part, instead of being too focused on the “screwup”. It helps me to be focused on resolving the issue at hand, instead of being too distracted by my emotions. It helps me to move on with mistakes, and makes me less afraid of making mistakes. And if you take your learning seriously, you become a better person than before!

I’m not saying you should follow this because it’s the “right answer”, but it’s more about: In school, things can get stressful, so you should really figure out your mental framework when it comes to handling your stress.

Ending notes

So what’s the best way to prepare yourself for school? What’s the best way for you to do well in school? Well, I’ll say the best way is really to think about “Why do you study CS?“. This is a question that neither I nor anyone else can answer for you. Only you can answer it, and it will take some significant effort to find a good answer.

Let me know if you have any thoughts!

Be tough, stay strong, and all the best! 💪🏻🙂