CS1010 Course Information and Policy
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
- 1 October 2024, Tuesday: Practical Exam 0 (6 - 9 PM)
30 September 20247 October, Monday: Midterm Test(4 - 6 PM)(4:30 - 6:15 PM)- 22 October 2024, Tuesday: Practical Exam 1 (6 - 9 PM)
- 12 November 2024, Tuesday: Practical Exam 2 (6 - 9 PM)
- 25 November 2024,
Friday:Monday: Final Exam (1 - 3 PM)
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. Screencasts are not guaranteed to be available on time, or at all. Posting of the screencasts 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
WednesdaySaturday afternoon. - 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.
Assessments
Assessment Types
There are two types of assessment, formative and summative assessments.
Formative assessments in CS1010 include past-year questions, problem sets, programming exercises, and online quizzes. They carry little or no weight 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 total weightage (10%), 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. More details about programming exercises can be found in the handbook.
- 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 during 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 complete their formative assessments (quizzes, past-year papers, 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
Collaboration on Programming Exercises
- As a key component through which students learn problem-solving and programming skills, the programming exercises are best solved with an individual effort.
- Students are, however, free to collaborate and learn from each other. If the exercises are solved with the help of others, students should give credit to those who helped them (as part of C comments) as good professional etiquette.
- Copy-pasting from collaborators (or other online sources) when solving programming exercises would not help students learn. Our experience indicates that students whose exercise submissions exhibit high similarity with other students tend to perform poorly in practical exams. A good rule of thumb to follow is Gilligan Island's Rule: After discussing with others, engage in 30 minutes of mind-numbing activities, before working again on an exercise question without referring to any notes of the discussion. This approach ensures that the student can reconstruct the solution based on what he/she has understood through the discussion.
Late/Missed Submission Policy
- No late submission will be considered for quizzes and programming exercises.
- Students are allowed to miss up to 10% of the total marks for each formative assessment. The 5% weightage for quizzes is calculated with the formula \(\min(5, \frac{5x}{0.9\times N})\), where \(N\) is the total available marks for quizzes and \(x\) is the attained marks by a student. The 5% weightage for programming exercises is calculated similarly.
- Tutors are not obligated to provide feedback on exercise submissions that are late without acceptable justification.
- Students who have been approved by the university to be on LOA for an extended period (over one week) should discuss their learning and assessment plan with the teaching team separately. Such students may be given alternative deadlines for assessments.
Absence from Midterm and Practical Exams
- Students who are absent during a practical exam or the midterm test must inform the teaching team by filing a request ticket 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, an 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.
- Note that there is no second alternative assessment if a student is absent from the alternative assessment. Students who miss the alternative assessment can file for special consideration at the end of the semester. Details for filing for special consideration can be found at the NUS Student Portal (look under Special Consideration).
Absence from Final Exam
- The final exam is administered by the School and the Registrar's Office. Thus, it follows 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.
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
There are two main platforms for communication in CS1010: Piazza and RT.
- Use Piazza if you have questions about the course content and assessments. The teaching team will monitor Piazza regularly and respond to your questions there.
- Use RT (Request Tracker) for administrative and logistic matters (e.g., request for make-up test, request for re-grading of an assessment)
Emails or Canvas messages should be used only in the following situations:
- You are contacted by the teaching team through email or Canvas messages first.
- You wish to contact an individual instructor on private or personal matters.
Use only your official NUS email if you email the teaching staff -- either the one with @u.nus.edu
or @comp.nus.edu.sg
.
If you email us, 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.
- RT: For submitting request tickets for administrative and logistics matters.
- 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: Use to disseminate graded written tests/practical exams back to students.
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 ask 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 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 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.