Overview of CS1010

This course equips you, typically as a first-year computer engineering (CEG) or information security (InfoSec) student, 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 work in remote terminal environments, which are often Linux/UNIX-based, a typical situation for CEG and InfoSec students in the real world.

Unique aspects of CS1010

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

  1. The language of instruction is C, rather than Python, Java, JavaScript, or other languages that are more common in introductory courses
  2. We place additional emphasis on working in UNIX-like environments, such as 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 for programming style and program modularity
  3. Analyse the specifications of complex engineering and scientific problems and develop algorithmic solutions
  4. Trace programs and apply testing and debugging techniques to verify program correctness
  5. Understand and apply the basic concepts of computational thinking and the problem-solving life cycle

Teaching and Learning Activities

To help you achieve these objectives, CS1010 has three types of classes each week:

  1. Lecture (Monday): a two-hour session where we introduce the core concepts for the week. The companion material is in the Notes section of this site
    • This is an introduction. Lectures can only go so far: the class is large, we cannot answer every question, and we need to begin by assuming that you are new to the concept
  2. Tutorial (Wednesday): a one-hour session where you learn practical UNIX skills to support your ability to write, understand, execute, and debug code. You can find out more in Tutorials
  3. Lab (Thursday): a two-hour session where you learn to think programmatically and write code to solve problems. The lab questions are in the Labs section, and the programming assignments that follow are in the Volumes section