Skip to content

CS1010 Course Information

Course Description

CS1010 introduces the fundamental concepts of problem-solving by computing and programming using an imperative programming language. It is the first and foremost introductory course to computing. It is also the first part of a three-part series on introductory programming and problem-solving by computing, which also includes CS2030/S and CS2040/C/S. Topics covered include problem-solving by computing, writing pseudocodes, basic problem formulation and problem-solving, program development, coding, testing and debugging, fundamental programming constructs (variables, types, expressions, assignments, functions, control structures, etc.), fundamental data structures: arrays, strings and structures, simple file processing, and basic recursion. This module is appropriate for SoC students.

Learning Outcomes

After taking CS1010, students should

  • be familiar with fundamental programming concepts and methodology (variables, assignments, conditions, branches, loops, functions, recursions, structures);
  • be familiar with and appreciate good programming practice, and apply it to follow-up courses;
  • be able to apply problem-solving knowledge and skills to write small, well-documented, effective C programs;
  • be able to appreciate the use of simple data structures such as arrays, and know their limitations to pave the way for more complex data structures in the next course;
  • know the responsibilities of an ethical programmer;
  • be able to write simple programs in the corresponding programming language to solve a task, given the constraints on the inputs;
  • be able to manually trace through a program to identify logical errors;
  • be able to differentiate between logical errors, syntax errors, and run-time errors;
  • be exposed informally to the concept of code specification in the form of comments in the code, explaining what are the expected inputs and outputs and what are the assumptions;
  • know about what are some insecure functions to avoid;
  • be able to generate test cases on their own, with a focus on boundary/special cases;
  • be aware of common strategies and good practices for debugging with printf or equivalent functions;
  • be able to identify opportunities to, and write modularized code;
  • be able to write code following a good programming style (clear comments, naming convention, indentation, etc.);
  • understand the different data types and that there exists a representation of each in the memory, as well as the limitation of the representations due to the limited number of bits;
  • develop a simple mental model of how a program is executed (CPU runs the code on data that is stored in memory, function call leads to the creation of call frames, which can explain recursion and variable scoping, etc).
  • be able to understand at a high level the compilation process (from pre-processing to compiling to linking), where applicable;
  • understand the concept of reusability and how a software application can be built on top of software libraries/packages (standard or third parties);
  • be able to implement bubble sort and insertion sort;
  • be able to implement linear search and binary search (both iterative and recursive versions);

Important Dates

  • 2 October 2023, Monday: Midterm Test (4 - 6 PM)
  • 3 October 2023, Tuesday: Practical Exam 0 (6 - 9 PM)
  • 24 October 2023, Tuesday: Practical Exam 1 (6 - 9 PM)
  • 14 November 2023, Tuesday: Practical Exam 2 (6 - 9 PM)
  • 1 December 2023, Friday: Final Exam (9 - 11 AM)

Due to coordination with multiple other courses and logistics issues -- the practical exam dates/times are subject to change. It will be finalized by Week 3 of the semester.

Prerequisites

Students entering CS1010 are expected to

  • have basic knowledge of A-level Math (functions, graphing and transformation, sequences and series, vectors, complex numbers, probability, and statistics) and O-level Additional Math (algebra, geometry, and calculus). We do not expect students to have any programming background before entering CS1010.
  • be comfortable using computers and be able to follow high-level instructions (e.g., "download and install this software").

Lessons

Lectures

  • The weekly 2-hour lectures are typically where you learn about new concepts.
  • The lectures closely follow the course notes. Students are encouraged to read through the notes before the lectures.
  • The lectures will be recorded. Screencasts of the lectures will be posted online 1-2 days after the lecture. This will be done on a 'best effort' basis. The screencast is not guaranteed to be available on time, or at all. Posting of the screencast is meant to help students who attended the lecture to recap the content or to help those who are not able to attend the lecture due to unexpected circumstances. It is not meant to be a replacement for lecture attendance. Students are encouraged to attend the lectures live so that they can interact and ask questions.
  • Lecture slides will be posted after the class. Note that slides are used as a visual aid to assist me during the lectures. It is not meant as a summary of lectures nor a replacement for lecture notes.
  • We do not take attendance for the lectures.

Tutorials

  • The weekly 1-hour tutorial sessions (starting Week 3) allow students to interact with the teaching staff in smaller groups and discuss the problem sets.
  • Attendance will be taken. Students who cannot attend a tutorial session should inform their corresponding tutor.
  • Students are expected to attend their assigned tutorial session. If there is a strong need to attend another session for a specific week, the student must inform the corresponding tutor.

Labs

  • The weekly 2-hour lab sessions (starting Week 3) allow students to participate in hands-on learning activities.
  • Activity varies, but in most weeks, students and lab tutors will discuss the programming exercises and explore the thought process and different solutions together.
  • The lab sessions are usually where most of the learning happens.
  • Attendance will be taken. Students who cannot attend a lab session should inform their corresponding tutor.
  • Students are expected to attend their assigned lab session. If there is a strong need to attend another session for a specific week, the student must inform the corresponding tutor.

Catch-Up Sessions

  • Every three weeks, we run a 2-hour Q&A session for students to clarify doubts on Saturday morning.
  • Attendance is optional, but we strongly encourage students who are falling behind to take this opportunity to clarify doubts and catch up.
  • Catch-up sessions are recorded. The video will be shared after the session.

Assessment

Assessment Types

There are two types of assessment, formative and summative assessments.

Formative assessments in CS1010 include problem sets, programming exercises, and online quizzes. They carry little weight (10%) and are meant to help students self-diagnose and improve their problem-solving ability, programming skills, and understanding of the concepts taught in class. They are also meant to make students think deeper about the lessons, apply what they learn, and gain experience and confidence in their problem-solving/programming ability. Despite the smaller weightage, we expect that students spend most of their time on formative assessments.

The summative assessments, on the other hand, are meant to evaluate student learning. These include two written assessments (the midterm and the final exam) and three practical exams. These are high-stakes assessments carrying 90% of the total weights.

  • Problem Sets: At the end of some lesson units, we will provide some exercise questions to make students reflect and practice applying what they have learned in the corresponding unit. These questions are not graded. There is no need to submit answers for grading. They will be discussed and presented during the tutorial sessions.
  • Past Year Test Papers: Past year test papers are made available for practice. These are not graded. There is no need to submit answers for grading. Selected questions may be discussed during class. They can be discussed on Piazza.
  • Quizzes: The online quizzes are released every week after the lecture (Monday, 6 PM) and are due two days later (Wednesday, 11:59 PM). The quizzes are more tightly coupled to the content of the weekly lectures and are meant to help students self-diagnose their understanding of what is taught for that week. You may attempt the quizzes an unlimited number of times. We will consider only your highest score.
  • Programming Exercises: These are programming questions of various difficulty levels that are critical for students to solve, to gain experience, skills, and confidence in solving computational problems with C. Typically students spend more than half of their time in CS1010 on solving these programming exercises. Students should submit them on time to get feedback from their lab tutors.
  • Practical Exams: Students will be given programming questions to solve within a limited time frame, in an examination setting in SoC computer labs. This is usually held in the evening or on a Saturday.
  • Midterm and Final Exams are written tests (on pen and paper) conducted in exam halls.

Assessment Weightage

  • Quizzes: 5%
  • Programming Exercises: 5%
  • Practical Exam 0: 10%
  • Practical Exam 1: 15%
  • Practical Exam 2: 20%
  • Midterm Assessment: 15%
  • Final Assessment: 30%

Open-Book Assessment

  • All assessments, including practical exams and written exams, are open-book assessments -- you can bring in your notes or other analog reference materials.

Use of AI Tools

  • Access to AI tools is restricted during the summative assessments (practical exams and written exams)
  • Students may use AI tools to assist them to complete their formative assessments (quizzes, problem sets, and programming exercises). The use of AI tools, however, should be moderated and used to help students achieve the learning outcomes of CS1010. It is pointless to use AI tools to generate answers to formative assessments.
  • Students should familiarise themselves with the NUS policy on the use of AI tools and the guidelines for using AI tools for academic work

Discussion and Plagiarism

  • We encourage discussions among students for programming exercises, but each student should be responsible for writing his/her code and should give credit to others when appropriate.
  • NUS and the School of Computing have a high standard of academic honesty and take any violation seriously. In the context of computing modules, source code plagiarism -- copying code from another source and attributing it as one's code -- is a serious violation. Please read the page Preventing Plagiarism from the school's website to familiarize yourself with the policy.
  • CS1010 adopts a "no mercy" policy when it comes to disciplinary action on plagiarism. Both parties, the student who copied, and the student who allowed others to copy, will be penalized equally.
  • Considering that the programming exercises are meant to be formative and contribute very little to the grade of CS1010, there is no point in plagiarising when solving programming exercises. Doing so would not help students learn and prepare them for the practical exams.

Late/Missed Submission Policy

  • No late submission will be considered for quizzes and programming exercises. Note that students are allowed to miss up to 10% of the submissions.
  • Students who have to miss more than 10% of their submissions should email cs1010@comp.nus.edu.sg with a justification for missing the deadline within 24 hours of the deadline. Only medical, academic, and compassionate reasons can be considered (e.g., representing NUS for a sports event is OK; Attending a wedding is not). Documented proofs (e.g., medical certificates) are required.
  • Tutors are not obligated to provide feedback on code that are submitted late.

Absence from Midterm and Practical Exams

  • Students who are absent during a practical exam or the midterm test must inform the teaching team (by emailing cs1010@comp.nus.edu.sg or through filling up an online form) with a justification for missing the exam within 24 hours after the end of the exam. Only medical, academic, and compassionate reasons can be considered (e.g., representing NUS for a sports event is OK; Clashes with another course activity is OK; Attending a concert is not). Documented proofs (e.g., medical certificates, email from the other course instructor) are required.
  • Being absent without justification during a practical exam or the midterm test will result in 0 marks for the corresponding assessment.
  • An alternative assessment will be arranged for students who are absent during the midterm or practical exams with valid justification.

Absence from Final Exam

  • The final exam is administered by the School and the Registrar's Office and thus followed a separate procedure. Students who are absent from the final exam should apply for special consideration. Details can be found at the NUS Student Portal (look under Special Consideration).

Grading

  • CS1010 is not graded using a bell curve.
  • A student will receive the grade he or she deserves, irrespective of how the other students in the class perform.
  • The number of As and Fs will not be artificially capped.
  • As such, students should work together and help each other learn, instead of competing with each other for a limited number of As.

The Teaching Team

You can find the members of the teaching team here. You can reach the team at cs1010@comp.nus.edu.sg

The team is responsible for facilitating your learning in CS1010. Their responsibilities include:

  • Planning and delivering the lessons during lectures, tutorials, and labs;
  • Facilitating hands-on practices and discussions during tutorials and labs;
  • Clarifying any doubts from students during class or offline via Piazza;
  • Setting the assessment questions and practice exercises
  • Providing feedback on submitted assessments and exercises;
  • Planning and running the practical exams and the midterm test;

Please note that the following are not handled by the CS1010 teaching team. We can help to forward your requests to the relevant office but often it is faster if you contact them directly:

  • Allocation of labs and tutorials (This is handled by the SoC UG office, through CourseReg)
  • Management of programming environments, including the PE hosts, VPN, and computer labs (This is handled by the SoC IT Unit. You can contact them here)
  • Planning and running the final examination (This is handled centrally with all other exams by the NUS Registrar Office. You can contact them via examinations@nus.edu.sg);

Communication Policy

  • Piazza is the preferred platform if you have questions to ask or issues to raise (either publicly to your classmates or privately to the instructors)
  • If you must use email, please send it to the email address cs1010@comp.nus.edu.sg. This is a large course managed by a team. Doing so would ensure that your email receives the right attention and is handled by the right member of the team. Emailing individual instructors may cause a delay in response (if the email is not lost).
  • Only email a specific individual instructor or message the instructor using Canvas if you have matters that are personal and private.
  • Prefix your email subject with [CS1010]
  • Use only your official NUS email for communication with the teaching staff -- either the one with @u.nus.edu or @comp.nus.edu.sg.
  • If you email us your question, and we feel that your question and the answer are useful to the rest of the class, we will publish it on Piazza, with proper anonymization.

Essential Web Resource

CS1010 uses several web applications to manage the content, assessments, and interaction with students.

  • Canvas: Announcements, class rosters, surveys, quizzes, grades, and sharing of PDF documents are managed through Canvas.
  • Handbook: Notes, problem sets, programming exercises, and lab guides, are publicly available on the web.
  • Piazza: Q & A website that serves as the main forum for discussion about CS1010.
  • GitHub: Contains submitted code repositories and feedback about the code from tutors.
  • Softmark: Contain written test scripts and feedback about the answers.

Asking Questions and Getting Help

CS1010 is not an easy course. Students are encouraged to ask questions if they don't understand something or if they are stuck solving a formative assessment question. Students are encouraged to ask questions during lectures, tutorials, and lab sessions. Outside of these lessons, there are several ways to do so.

  • Piazza:
    • The best place to get help is on Piazza. If you have a question, please first check if someone has already asked the same question and if there is an answer.
    • Students are expected to monitor Piazza regularly and learn from the interaction happening there. Often, students asked good questions that can bring new insights to understanding the course materials.
    • If your question has not been answered, you can post a question yourself. Please follow the general etiquette and guidelines of asking questions on Piazza if you do so.
  • Office Hours:
    • Course instructors and tutorial instructors have set aside a weekly office hour to meet and answer questions from students, face-to-face. Students are encouraged to meet with their tutorial instructors during this hour to clarify doubts and ask for help.
    • Outside of this fixed hour, students can arrange for an appointment to meet with the tutorial instructors.
  • Messaging:
    • Many lab tutors made themselves available on messaging platforms to answer questions from their students.
    • Note that lab tutors are not obligated to be available 24/7 to answer questions through messaging. Each lab tutor is free to set their own policy on when they are available to answer questions via their choice of messaging platforms.
    • We encourage all Q&A to be done through Piazza so that all students can benefit from the questions and answers, instead of these messaging platforms, which only benefit a subset of students.

Mental Health and Wellness

  • Adjusting to new ways of learning and a new environment at NUS can be challenging, and it may be especially more so for students from diverse backgrounds and circumstances.
  • If you feel stressed, anxious, depressed, overwhelmed, or just need someone to talk to, you may reach out to the SoC Student Support Manager from the Student Life office or the NUS University Counselling Services
  • You may also approach the CS1010 Teaching Team, who can work with these services to support and accommodate students who need help (e.g., with alternative deadlines).
  • Consider this - As you embark on your university journey with SoC, it's crucial to remember that your goals extend beyond just scoring high grades. While studying is important, equally vital are opportunities for personal growth, forming meaningful connections, enjoying life, and preparing for your future career. It is essential to maintain a healthy balance between academics and mental well-being, recognizing that a few marks should never jeopardize your overall health and well-being.

Expectations

To maximize the gain out of CS1010, students should commit to

  • reading through the announcements, emails, and Piazza posts, to keep themselves up to date with the latest course activities and discussions in CS1010;
  • following instructions and respecting stipulated deadlines on administrative matters;
  • reading the provided lecture notes, attending classes, and actively seeking clarification when doubts arise;
  • making a best effort attempt at solving the quizzes, problem sets, programming exercises, and past year questions; not copying solutions from friends, AI, or other online sources;
  • striving to understand the thought process and the principle behind the solutions/sample code (from the teaching team or otherwise) after they are released;
  • helping each other learn (through discussion and teaching each other) to better understand the course materials and to solve the assessment questions, without providing solutions verbatim for others to copy;
  • actively participating in lab and tutorial lessons, by asking questions, sharing attempts, and commenting on each others' attempts;
  • actively asking for guidance and feedback, when feeling lost with what is taught or falling behind.