On this page:
1.1 Office Hours
1.2 Schedule
1.3 Course Structure
1.4 Course Notes
1.5 Lecture Feedback Surveys
1.6 Grade Breakdown
1.7 Extension and Late Policy
1.8 Getting Help

1 Logistics

The full course outline can be found at https://outline.uwaterloo.ca/view/n62uxs

1.1 Office Hours


TTh 4-5pm DC 3548


MF 3:30-4:30pm DC 3133 (online F)


Th 1-2, F 11-12 MC 4065


T 2:30-4pm, W 8:30-10am online


T 1-2 MC 4065, W 11-12 online


F 12-1 online

1.2 Schedule

1.3 Course Structure

CS241 has a number of components that reinforce each other.
  • Lectures are held twice per week by the instructors. Lecture attendance is recommended, but Course Notes are provided for those who miss a lecture. Bonus marks will be earned through Lecture Feedback Surveys.

  • Tutorials are held once per week, generally by an Instructional Apprentice or Instructional Support Assistant. These are optional but highly recommended for everyone averaging less than 80% on their assignments.

  • Assignments in CS241 are divided into smaller Questions and larger Projects, released periodically through the term. Questions will be released at a rate of roughly 1–2 per week up until around halfway through the term. Projects will be spread out throughout the term, with the end of the term being focused more heavily on projects.

1.4 Course Notes

Course notes are provided as a reference. The notes are being revised for this term and they are a work in progress. New chapters will be added regularly over the term.

Course notes are not meant to be a substitute for lecture attendance. At our discretion, lectures may cover additional material not present in the course notes, and you are expected to know this material.

1.5 Lecture Feedback Surveys

To encourage lecture attendance, you may earn bonus marks (up to 3.5% of the final grade) by completing small reflection surveys about the lectures. We hope that the surveys encourage you to attend lectures and also helps you reflect on what you learned, and helps us reflect on what worked in each lecture.

Think of the survey as continuous integration for yourself as well as course staff.

The surveys will be hosted on Learn, and will be available to everyone, but you can only get the bonus marks if you attend the lectures (and since the surveys will be about the lectures, if you don’t attend, you probably won’t have much to say anyways). See the Grade Breakdown section below for precise details about bonus mark allocation.

To check lecture attendance, we will use iClicker Cloud. While iClicker Cloud uses a subscription model for in-class quizzes and polls, attendance check-ins do not require a subscription, so only a free iClicker Cloud account is required. You also do not need an iClicker remote; you can use a mobile device or laptop to check in.

There will be one survey per week of class, not counting the first and last weeks, for a total of 12 surveys. To receive bonus marks for a survey, you typically must attend both lectures from that week. However, to grant lenience for students who are sick or have other extenuating circumstances, for a maximum of 3 surveys, you can get the bonus marks for a survey even if you miss one of the two lectures in that week. If you miss both lectures in a week, you are out of luck.

Surveys will be released on Fridays, and each survey is due by the following Friday.

1.6 Grade Breakdown

Assignment Component (30%)
10 questions worth 1% each
5 projects worth 4% each

Exam Component (70%)
Midterm worth 30%
Final worth 40%

Bonus Component (up to 5% bonus)
There are 20 bonus points available in the course, each worth +0.25% to your final grade. Therefore, earning all 20 points gets you a 5% bonus on your final grade.

14 bonus points for Lecture Feedback Surveys (3.5%)
+1 for each completed survey (12 total)
+1 for completing at least 6 surveys
+1 for completing at least 10 surveys

In general, a survey will be considered “complete” (for the purpose of bonus points) only if you attend both lectures in the week preceding the survey. However, to accommodate unexpected circumstances, we will allow up to 3 surveys to be considered “complete” even if only one of the two lectures is attended.

6 bonus points for Assignment Extras (1.5%)
+1 for Linguistic Diversity 1: At least one project done in C++, at least one in Racket
+1 for Linguistic Diversity 2: At least two projects done in C++, at least two in Racket
+1 for Bonus Question 1
+1 for Bonus Question 2
+1 for Bonus Question 3
+1 for Project 5 Bonus Challenge

1.7 Extension and Late Policy

Assignments (Questions and Projects) can be submitted late, up until 11:59pm on the last day of classes. Your mark for each assignment is determined as the average of your best on-time mark and your best overall (on-time or late) mark. Assignments in this course often build on earlier assignments, so we encourage you to try to complete them all – particularly the projects, which come together to form one big compiler!

Extensions to on-time deadlines may be provided if you have extenuating circumstances, such as a short-term absence or illness. Contact the Instructional Support Coordinator Gang Lu to discuss this.

1.8 Getting Help

You might get stuck or confused working through the material in CS241! That’s OK – this material is difficult and getting confused is normal. That being said, here are a couple of ways you might use to get unstuck:
  • Talk with a friend: Talking with a friend (or a rubber goose) is often really helpful for getting un-confused! Explaining to your friend (or goose) what you’re confused about is sometimes all you need to get un-confused. Concretely, vocalizing our thoughts and explaining what we’re confused about can help you fully understand why you’re confused. That being said, you still have to write your code for your assignments by yourself – but you can still talk to a goose.

  • Come to office hours! The course staff are both friendly and helpful, so drop by office hours if you’re still confused. We’ll do our best to get you un-confused! However, we won’t debug your code unless you’ve made a good-faith effort to test and debug by yourself first; in particular, we want to see good test cases! But we’ll be happy to suggest general avenues of testing if you’re stuck debugging.

  • Piazza: Finally, we’ll be using Piazza as an online discussion forum. Please post any questions you might have about the course material! You’re also encouraged to answer questions on Piazza; thinking through other students’ questions and writing down a response is a good learning exercise and earns you good karma! But please avoid giving away details of your solution to any homework problems.

    Debugging Policy: Piazza posts about specific code problems will be summarily deleted unless you’ve made a good-faith effort to test and debug by yourself first. However, as before, it’s OK to ask for the sorts of tests you should write if you’re stuck debugging a problem in your code.

Friends are great, and collaboration is great, but too much of a good thing is a bad thing. Don’t collaborate excessively – see the course outline for details.