CS 106
Introduction to Computer Science 2

This is the home page for CS 106, a second-level introductory programming course at the University of Waterloo. The course explores the use of graphics in art, design and visualization contexts. It is a required course for students in the Global Business and Digital Arts program.

A lot of the information on this page can also be found in a separate course outline.


CS 106 LEC 001: Mondays and Wednesdays, 10:00–11:20, MC 1085
CS 106 LEC 002: Mondays and Wednesdays, 2:30–3:50, QNC 1507
CS 106 LAB 101: Mondays and Wednesdays, 1:00–2:20, MC 3003
CS 106 LAB 102: Mondays and Wednesdays, 4:00–5:20, MC 3003
CS 106 LAB 103: Mondays and Wednesdays, 1:00–2:20, MC 3005
CS 106 LAB 105: Mondays and Wednesdays, 1:00–2:20, MC 3027
Students from LAB 104,106 should attend LAB 102 in MC3003
Wednesday March 1st, 7:00–8:50, rooms TBA
Final Exam


For questions related to course content, contact an instructor or an ISA. The best place to ask questions is on Piazza, but you can also send email (add "@uwaterloo.ca" to the addresses below) or visit during office hours. For questions about marking, contact the Assistants first, who will consult with the Instructor if necessary. For questions about course logistics (particularly absences), contact the Coordinator.

Instructor: Craig S. Kaplan (see also)
email: csk
Office hours: Tuesdays 2:30 PM – 3:30 PM or by appointment in DC 2110.
Instructor: Kevin Harrigan
email: kevinh
Office hours: Wednesdays 4:00 PM - 5:00 PM in DC 3126
Instructional Support Assistant: Kristina Bayda
email: cs106
Office hours: Thursdays 2:00 PM - 3:00 PM, Fridays 1:00 PM - 2:00 PM in MC 4065.
Instructional Support Assistant: Rishabh Moudgil
email: cs106
Office hours: Wednesdays 12:00 PM - 1:00 PM, Fridays 2:00 PM - 3:00 PM in MC 4065.
Instructional Assistant: Anthony
Office hours:
Instructional Assistant: Jane Henderson
Office hours:
Instruction Support Coordinator: Travis Bartlett
email: trbartle


The lecture schedule below is given in terms of Section 002 (the 2:30pm class). Section 001 (10:00am) will follow roughly one lecture period later. Both sections will have the same assignment and lab deadlines.

Week of Lectures Suggested readings
02 January Module 00: Administration
Module 01: Processing recap [notes]
CS 105 lecture notes
09 January Module 02: Arrays and Strings [notes, sketches] Learning Processing, Chapters 9 and 17; Online tutorial on arrays; Online tutorial on strings
16 January Module 03: Input and Output [notes, sketches] Learning Processing, Sections 15.1, 17.1, 17.2, 17.3, 18.3, 18.4, 21.3, 21.4
23 January Module 04: Advanced Shapes [notes, sketches]
Learning Processing, Sections 14.3, 13.8, 13.9; online tutorial about the PVector class
30 January Module 05: User Interfaces [notes, sketches]
06 February Module 06: Geometric Context [notes, sketches]

Learning Processing, Sections 14.1, 14.5, 14.7, 14.8, 14.9 (ignoring 3D)
13 February Module 07: Recursion [notes, sketches] Learning Processing, Section 13.11
Nature of Code, Chapter 8
20 February Reading week: no lectures
27 February Module 08: Randomness [notes, sketches] Learning Processing, Sections 13.3–13.6
06 March Bonus: 3D [2016 notes, sketches]
Module 09: Noise [notes, sketches]

Nature of Code Introduction, especially I.6, "Perlin Noise (A Smoother Approach)"
13 March Module 10: Text processing [notes, sketches] The first part of Shiffman's online notes about data
Learning Processing, Sections 17.1, 17.2 and Chapter 18
20 March Module 11: Tables [notes, sketches]
27 March Module 12: Tree-structured data [notes, sketches]
03 April Wrap-up


Participation 5%
Labs 5%
Assignments 30%
Midterm 20%
Final 40%

You are required to pass the examination portion of the course in order to pass the course as a whole.

Please see the bottom of the course outline page for more information about re-marking of assignments and the midterm.


Before submitting code for assignments, you should familiarize yourself with the code style guidelines (as well as Processing's auto-format feature!) and read the instructions on how to submit code on LEARN.




  • We have created a large set of practice programming exercises to help you build your skill at writing short functions. Some of these exercises may be included in labs during the term.


Course technology

  • We use Piazza for questions, discussions, announcements, and other topics of interest to students in the course. Visit The course's Piazza page for timely updates on course material. Feel free to use Piazza to seek help with assignments from the course staff or each other, but keep academic integrity in mind. Don't post anything publicly that might constitute an academic offence (e.g., a partial solution to a programming question). If in doubt, you can always make your post private, so that other students can't see it.
  • Non-public aspects of the course (such as assignment submission and marks) happen on LEARN. But for the most part, all other course-related documents will be posted publicly here.
  • The course uses iClickers for in-class feedback and quizzes. The Faculty of Mathematics has a fairly extensive iClicker FAQ if you have any questions. You will need to register your clicker in order for your in-class responses to be recorded. You can also view your clicker marks online.

Other documentation

  • There are a few general documents that will help you get through this course, which are identical to the ones we made available to you in CS 105. Make sure you've read the Survival Guide for starters. Then, before submitting code for assignments and labs, make sure you're up to speed on our suggested code style guidelines and that you know how to submit code on LEARN.


Academic Integrity

In order to maintain a culture of academic integrity, members of the University of Waterloo community are expected to promote honesty, trust, fairness, respect and responsibility. [Check www.uwaterloo.ca/academicintegrity/ for more information.]


A student who believes that a decision affecting some aspect of his/her university life has been unfair or unreasonable may have grounds for initiating a grievance. Read Policy 70, Student Petitions and Grievances, Section 4, www.adm.uwaterloo.ca/infosec/Policies/policy70.htm. When in doubt please be certain to contact the department's administrative assistant who will provide further assistance.


A student is expected to know what constitutes academic integrity [check www.uwaterloo.ca/academicintegrity/] to avoid committing an academic offence, and to take responsibility for his/her actions. A student who is unsure whether an action constitutes an offence, or who needs help in learning how to avoid offences (e.g., plagiarism, cheating) or about 'rules' for group work/collaboration should seek guidance from the course instructor, academic advisor, or the undergraduate Associate Dean. For information on categories of offences and types of penalties, students should refer to Policy 71, Student Discipline, www.adm.uwaterloo.ca/infosec/Policies/policy71.htm. For typical penalties check Guidelines for the Assessment of Penalties, www.adm.uwaterloo.ca/infosec/guidelines/penaltyguidelines.htm.


A decision made or penalty imposed under Policy 70 (Student Petitions and Grievances) (other than a petition) or Policy 71 (Student Discipline) may be appealed if there is a ground. A student who believes he/she has a ground for an appeal should refer to Policy 72 (Student Appeals) www.adm.uwaterloo.ca/infosec/Policies/policy72.htm.

Students with Disabilities

AccessAbility Services (AAS), located in Needles Hall, Room 1132, collaborates with all academic departments to arrange appropriate accommodations for students with disabilities without compromising the academic integrity of the curriculum. If you require academic accommodations to lessen the impact of your disability, please register with AAS at the beginning of each academic term.