Overview of CS1010

This course will equip you (typically: first-year computer engineers [CEG] and information security [InfoSec] students) with foundational, hardware-aware knowledge of the C programming language and UNIX terminal environments.

It is also the first part of a three-part series on introductory programming and problem-solving with computing, which also includes CS2030/S and CS2040/C/S.

In CS1010, you will learn core language constructs and higher-level skills such as abstraction, good code design, and best practices. You will use these skills to compose programs that solve realistic computational problems. Alongside reading, writing, and debugging code, you will develop mental models of how programs execute on underlying computer hardware.

This course also focuses on practical skills, including how to operate in remote terminal environments which are often Linux/UNIX-based - a typical situation for CEG/InfoSec students in the real world.

Unique aspects of CS1010

There are couple of things that make CS1010 a pretty unique introductory programming course in NUS:

  1. The language of instruction is C (not Python, Java, Javascript, or others, which are far more common nowadays in introductory courses)
  2. We have an additional focus on operating in UNIX-like environments (e.g., the Linux command line) To understand why this is the case, you can read our Course Design FAQs

Course Learning Objectives

By the end of the course, you should be able to:

  1. Use software tools to write, compile and execute programs.
  2. Adopt good practices of programming style and program modularity.
  3. Analyse the specifications of a complex engineering/science problem and come up with an algorithmic solution for the problem.
  4. Trace programs and apply techniques of testing and debugging to verify the correctness of programs.
  5. Understanding and applying the basic concepts of computational thinking and problem solving life cycle.

Teaching / Learning Activities

To help you achieve these objectives, we have three forms of classes within CS1010 each week.

  1. Lecture (Monday): a two hour session where we introduce the core concepts required for the week. The companion to these is the Notes section of this site.
    • This is just an introduction! Lectures can only go so far, as the class is large, we can’t answer every question, and we need to start by assuming you don’t know anything about the concept.
  • Tutorial (Wednesday): a one-hour session where you learn practical UNIX skills to support your abilities to write, understand, execute, and debug code. You can find out more at Tutorials.
  • Lab (Thursday): a two-hour session where you learn how to think programmatically and write code to solve problems. The lab questions are in the Labs section, and the programming assignments you will do after are in the Volumes section.