Tips for potential Computer Science undergrads in Singapore
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 in National University of Singapore, and also shed light on the common misconceptions that people may have.
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?
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, data structures and algorithms, calculus, discrete mathematics, linear algebra and software engineering.
CS1010 (or its variants like CS1101S) teaches basic programming methodologies, while CS1020/CS2010 (or CS2020) teaches how to solve algorithmic problems with data structures.
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.
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.
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.
All the best!
webuild.sg - List of technology meetup groups in Singapore
engineers.sg - Meetup video recordings in Singapore
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
CS2010 Data Structures and Algorithms II
CS2100 Computer Organisation
CS2103T Software Engineering
CS2105 Introduction to Computer Networks
CS2106 Introduction to Operating Systems
CS3230 Design and Analysis of Algorithms