Posted on February 26, 2017

A brief guide for potential NUS Computer Science undergraduates

Update Dec 2017: I’ve graduated from NUS. Specific references in this article about NUS and the computing faculty may be outdated - please contact me if there’s information that should be updated.

As there has been growing interest in CS undergraduate courses over the past few years, I would like to share my experience as a CS major at National University of Singapore, and also shed light on the common misconceptions that people may have. This essay will also be focussed on National University of Singapore’s curriculum and programmes, because I’m most familiar with it.

My background: I’m a fourth year CS major. Prior to this, I graduated from Ngee Ann Polytechnic with a Diploma in Network Systems & Security.

I made the decision to read CS upon realising the gaps in my knowledge of technology.

I felt confident in designing and implementing network systems, but never understood why network protocols were designed in that manner. A quick search on Wikipedia on a network protocol algorithm, Djikstra’s Shortest Path, inundated me with so much math that it quickly made me realize that a CS education will provide the foundational theoretical knowledge to understand these algorithms.

Should I study CS?

You know how to use computers as a tool to get things done. However, you’ve probably never learnt why and how they work behind the scenes.

Consider Google Search. Have you ever wondered why it seems to know everything and how it works behind the scenes? How did your search come back with millions of results in a fraction of a second? How did the information get from Google’s servers to your screen?

CS is the science of computational processes, like how Physics is the science of nature. It’s a foundational science that enables you to solve problems across disciplines and subfields.

It’s about taking problems, figuring out what needs to be solved, and providing a step-by-step solution to compute the solution. These problems come from other fields like healthcare, finance, environmental science, space exploration, game development, or something that you have an interest in. Anything.

If you’re a problem solver, CS will sharpen your mind to produce articulate and well-reasoned solutions, and to communicate them across domains.

If you’re not, CS will equip you with the mental toolbox to approach complex problems with confidence.

You’ll learn to break down complex problems into little problems that can be solved systematically. I recommend reading CS if you’ve enjoyed mathematical and logical challenges.

If this sounds interesting to you, then yes, go forth and study CS.

Computer Science is difficult.

CS is not a walk in the park.

No decent undergraduate degree program is a walk in the park.

A well-designed curriculum will begin with battle-tested fundamental courses. They will expand your mind and change the way you think about the world.

Don’t assume that you’re just going to learn how to program; you can do that in 2 weeks with an online course.

CS will flex your brain muscles and teach you how to reason rigorously in the various subfields, such as computer graphics, artificial intelligence and even programming languages themselves.

Wikipedia has a good outline of the subfields in CS.

What is CS at National University of Singapore like?

CS is taught in the School of Computing (SoC).

There are about 1300 undergraduates in SoC (as of 2017) across CS, Information Systems, Information Security, Business Analytics and Computational Biology.

As a freshman, you’ll do lot of common modules, so the first year tend to be similar with other majors.

The full SoC CS curriculum is available on the website.

The fundamental modules include:

introductory programming methodologies (CS1010 and S, X, E variants, CS1101S, CS2030)

data structures and algorithms (CS2040, CS3230)

calculus (MA1521)

discrete mathematics (CS1231)

linear algebra (MA1101R)

software engineering (CS2103)

After these, it’s generally assumed that you know how to code and are able to pick up the languages as needed.

For example, a parallel programming module will assume that you know how to code in C, or can pick it up in 1-2 weeks, since the syllabus is focussed on parallelism concepts.

The most hardware oriented module is CS2100, Computer Organisation. You’ll learn lower level concepts like logic, CPU design and basic assembly programming. Anything lower than that enters the realm of Computer Engineering, where modules are coded with CG instead of CS. CS students are not required to do electrical and electronic engineering modules.

From the second year onwards, you’ll specialize into a technical area of study called a Focus Area. There are ten of them.

Most students will spend their summer vacations on internships and exchanges. NUS Overseas Colleges is a popular choice for the entrepreneurial minded.

I highly recommend doing internships that are self-sourced, and not on the list provided in the faculty internship portal. Self-sourced internships usually result in more interesting companies and projects.

A SoC alumnus has compiled information on self-sourcing internships in Project Intern.

Don’t worry about a lack of programming background.

Most come in fresh – I didn’t (I learnt programming in NP), but I didn’t feel advantaged at any point in time.

I felt challenged by the first programming module I took in SoC, CS1101S, which I highly recommend freshmen to take, if you have the opportunity. It replaces CS1010.

If you want to prepare yourself, start reading /r/programming, Hacker News, and familiarize yourself with the idea that CS is not solely about programming but understanding how to compute things.

Programming is a tool to implement computations to solve a problem, like a hammer as the tool to drive nails into a piece of wood to create something.

However, disliking programming may lead to difficulty understanding CS materials, as they are intertwined.

Most NUS CS undergraduates will do Java at some point, especially in the Data Structures & Algorithms module. While that is a good starting point, don’t be afraid to branch out to other languages once you feel that you know Java well enough.

A quick glance at http://learnxinyminutes.com will show you the plethora of programming languages out there.

Popular programming languages are typically general purpose - meaning they can be used in many applications - but each language has its own niche area. For example, Python and Ruby are used for scripting languages, while Java is used for building enterprise systems. There are many guides on what language to learn first — I will not delve into that here.

Learning one language well makes learning successive languages easier.

But I’m bad at mathematics!

CS has an enormous intersection with mathematics.

I disliked mathematics prior to University. The lack of interest and curiosity stemmed from rote learning formulas in secondary school and tuition classes. It just didn’t seem like an interesting subject and I associated it with boredom and dread.

However, mathematics pedagogy in University is on a whole other level. You will finally understand why certain things in math are the way they are, and maybe it’ll start to seem more interesting to you.

Your teachers are now passionate professors who are experts in their research fields, and are usually patient enough to explain concepts to you if you ask.

I’m still not great at mathematics, but NUS CS has made me see math in a different light. For example, matrices in linear algebra are used heavily in Computer Graphics and Game Development, and graph theory is used in databases and computer program analysis.

Both CS and mathematics force you to think in terms of abstractions. Improving in one domain helps in the other.

Do grades matter in CS?

The idea of studying for grades is probably ingrained deep into you after the 10-something years toiling through the Singapore education system. It’s time to get rid of that.

In CS, grades serve as your personal benchmark. Being able to score well in a module gives you a sense of confidence that you have understood the subject materials.

It does not mean you can mess school up and get away with it. Scoring consistent C’s and D’s is a signal that you have not understood the material intuitively, and will pose problems when you’re taking higher level modules.

Grades do not mean much when applying for industry roles, such as software engineering. No interviewers have ever asked me for grades.

Relevant internships and side-projects, on the other hand, are great ways to convey your skills to potential employers.

Potential employers can derive your willingness to learn and try new things, which translates to a potentially great attitude in the working environment. Self-directed learning is important in CS.

However, grades are still relatively important for graduate school applications, along with a research portfolio.

What are my job prospects?

CS is one of the most versatile degrees to find work with.

It signifies that you’ve been through a rigorous curriculum and possess the ability to take on large and complex problems.

It is up to you to prove that you’re able to do it.

You can be a web developer, AI researcher, data scientist, software engineer, devops engineer, mobile app developer… the list goes on.

Each of those roles requires a specialized skill set, but CS forms the foundation of all of them.

Non-CS domains, like biology and finance, are full of problems that can be readily solved using CS techniques. See: DNA Editing with CRISPR, human genome project, anti-bank fraud systems and insider trading analysis.

Summary

CS is a field that has an ubiquitous nature.

It manifests itself in many different forms, and in many cases, it doesn’t even involve a computer.

To succeed in University, you’ll need to learn how to learn. That is, identify your gaps in knowledge and figure out how to fill them up efficiently.

The Singapore technology and research ecosystem is expanding rapidly with massive government support — there has never been a better time to pursue CS.

Feel free to ping me on Twitter or Email with questions or comments.

All the best!

Resources

Notes to NUS CS Freshmen, from the future

webuild.sg - List of technology meetup groups in Singapore

engineers.sg - Meetup video recordings in Singapore

What every computer science major should know - Matt Might

Plug: NUS Hackers

I’m part of the NUS Hackers coreteam.

We’re a group of people who wants to spread the hacker culture.

The idea of not hesitating to build and break stuff for fun and knowledge, sharing and just being curious about how things work. Our weekly Friday Hacks have very different topics – the idea is to expose the NUS community to various technical topics they wouldn’t have otherwise learnt in class.

We also run a hackerspace in NUS.

What about Information Systems?

IS is a degree that sits in the intersection of business and IT, while CS is deeply grounded in mathematics and logic. Many CS graduates eventually exit academia into engineering roles though.

It’s easier to see the difference between the core modules of these majors:

IS2101 Business and Technical Communication*

IS2102 Requirements Analysis and Design

IS2103 Enterprise Systems Development Concepts

IS2104 Software Team Dynamics

IS3101 Management of Information Systems

IS3102 Enterprise Systems Development Project

IS4100 IT Project Management