Welcome to CPSC 110

Computation, programs and programming play a vital role in the work of scientists, engineers, artists and other professionals: they allow us to organize, store, analyze and visualize information; create animations, music, and online communities; control devices in our environment; develop computational models and simulations; and much much more.

The major goal of this course is to introduce students to a systematic method for solving hard design problems. Going forward in your career you will of course learn additional techniques, but the design method covered in 110 will serve you well whenever you face a difficult design problemwhether it is program design or a problem from another field entirely. Previous students have said:

    Studying computer science inspired me to think about problems differently and take a more systematic approach to them.

    Program design is applicable not only to computer science, but numerous areas of life. It is essential in the development of problem solving skills.

In addition, 110 will help you understand how computation and programs work, and how the information systems in your everyday life work. Do you know how to design a computer animation? Or a multi-player game? Or a game that runs on your phone?  Or how to combine information from sources like eBay and Google in your own novel ways? Do you know how to use the process of writing a computer program to better understand ecosystems or Translink schedules? In 110 you will explore systems like these as part of your lab projects.

This course builds upon and extends the Coursera Systematic Program Design MOOC (Massive Open Online Course). Much of the content for CPSC 110 is available in the Coursera MOOC.

The course is designed to be interesting, accessible and useful for all UBC students—CS majors and non-majors alike. No prior programming experience is assumed, and very little math and science background is required. The course will also prepare you to learn more Computer Science skills and concepts in the future, either through formal courses or on your own.

The remainder of this syllabus contains important information for students in the course. Consult the frequently asked questions for other questions about the course.


The course demands curiosity, self-discipline, and a commitment to regular practice of the design skills presented in class. No programming experience is required.  Only a limited math and science background is required - grade 9 or 10 math is sufficient.

Learning Goals

The course-level learning goals for CPSC 110 are:

  1. Understand a systematic design process.

    This is demonstrated by being able to write programs for a reasonably complex task, where the ability to use the "one task - one function" rule can be demonstrated.

  2. Understand that programs are written both to run on computers and for people to read.

    This is demonstrated by being able to to write code that is readable, well organized, documented, and tested.

  3. Understand the relation between information and data.

    This is demonstrated by being able to design the data representation for a reasonably complex problem, and to describe the information encoded in the given data.

  4. Understand that the structure of the data a program operates on determines many elements of the program's structure.

    This is demonstrated by being able to identify correspondences between a data definition and a program that operates on that data. Also by being able to identify how potential changes to a data definition would affect a program.

  5. Understand that one can replace repetitive code with an abstraction in a systematic way. Understand that this is at the heart of designing libraries.

    This is demonstrated by being able to produce examples of code before and after abstraction: before, where one can see the repeated code, and after, where one can see the abstraction and verify that it provides the solution to the original problem, as well as several other similar problems. Students should also be able to design a program that uses existing libraries or existing code to solve a new problem.

  6. Understand that programs can be described using notations other than code, and that these models can facilitate program design.

    This is demonstrated by being able to identify correspondences between non-code models of a program and the program itself and by being able to use non-code models in program design.


See here for a full list of the staff for this term.


Consult the Schedule page and Coursera site for a weekly schedule of topics, learning goals, labs and problem sets, as well as dates of mid-terms.

Lecture and lab schedules are available at the student services website.

Office Hours

   Section 201: Bill Aiello - office hours Mondays 2:00-2:50pm and Fridays 3:30-4:30pm in ICCS X139
   Section 202: Paul Carter - office hours Wednesdays 10:30-11:30 in ICCS 391, Thursdays 2:00-3:00 in ICCS 391, Fridays 4:00-5:00 in HEBB 100
   Section V01: Meghan Allen  - office hours Mondays from 1-2pm in ICCS 243 and Fridays from 12-1pm in LMRS 206

  Feel free to check our offices at other times. If we are not busy we will be happy to talk with you.

  NOTE: See Course Announcements and Getting Help below for information about getting help online. 

TA Hours

Follow this link for TA hours in the Demco Learning Center (DLC) for office hours for sections 201 and 202. Note that ICICS and the DLC are locked nights and weekends! For after hours access:

Here are the TA office hours for the Vantage sections

Mondays, 1-2:30pm: Karen in LMRS second floor (open space or 205)

Tuesdays, 9-10:30am: Andrew in LMRS second floor (open space or 205)

Thursdays, 2-3:30pm: Imelda in LMRS second floor (open space or 205)

Fridays, 1-2:30pm: Karen in LMRS second floor (open space or 205)

Sundays, 6-8pm: Kamil in the boardroom in the commonsblock of Place Vanier


See the Schedule for the dates and locations of the midterms.

Optional Textbook

The optional textbook for the course is a combination of the 1st and 2nd edition of How to Design Programs, by Felleisen, Findler, Flatt, Krishnamurthi.

The first edition of the book is available both in the bookstore and online at http://htdp.org.

The second edition is
available online only at http://www.ccs.neu.edu/home/matthias/HtDP2e/.

Computer Account and Computer

You do not need to have your own computer to take this course. But if you do have your own laptop or notebook computer, and if you feel comfortable bringing it to class, then please go ahead and do so. You can use it for interactive work with the computer during both lecture and labs. If you do have a computer, then bring it to your first lab to get it setup for the course. (Or, if you want to get an early start see the Setup page for instructions.)

Again, please do not worry if you do not have your own laptop or notebook computer — the software is available on the department lab computers and lecture does not depend on everyone having their own computers. In lecture students often work together in pairs and many students with their own laptops actually prefer to work using paper and pencil during class. All labs are open to all students 24/7 when not actively in use for scheduled lab sections see https://www.cs.ubc.ca/students/undergrad/services/lab-availability for details.

Course Announcements and Getting Help

Email is not used as a mechanism for getting help with CPSC 110 course content. To get help with the course material go to the Piazza forum and post your question there. (It's best to actually search first, your question may already have been asked and answered.)  For questions of a personal nature (missing lab due to illness, needing to book a private appointment etc.) please email cpsc110-admin AT cs DOT ubc DOT ca. Your email must include your registered name, student number, lecture section and lab section. (For questions that are extremely personal in nature do feel free to send email directly to your instructor.)

The Piazza forum will also be used to make announcements of various kinds, so you must read the Piazza forum (link is in sidebar at left) at least once per day, 7 days a week. Such announcements will include:
  • problem sets
  • additions to or corrections to problem sets
  • information about exams
  • correcting errors in lecture notes
When posting a question to the Piazza forum please keep the following in mind:
  • Don't be reluctant to ask questions: if you are unsure about something chances are many other students are too. 
  • Do check previously posted questions before asking yours. Your question may have already been asked and answered so you can get the answer even more quickly.
  • If you see a question that you know the answer to go ahead and answer. The whole idea is to support a learning community where students and instructors learn from each other. You can learn a lot by answering questions. (Your answering questions on Piazza also helps us identify people who could be good TAs next year!)
Additional ways of getting help include:
  • Instructor office hours (see above)
  • TA hours in the DLC (see above)

Problem Sets

Each week you will be required to hand in your solution to a set of graded problems. These graded problem sets will be posted on the Piazza forum. Late problem sets will not be accepted.

To support you in preparing to do the graded problems we also provide a set of practice problems each week. These practice problems are available in the Coursera course.

You should do your work using Dr Racket. Hand in problem sets using 110 handin in DrRacket.   Be sure to put your Computer Science account id in the problem set template.

You are free to work the TA-graded problem sets together with one other student, but if you do so then:

  • you must hand in a single solution for both students
  • you must mark the single hand-in with the Computer Science account id of both students

Note that what you are allowed to do is work together with another student. You should not just add your CS id on work someone else has done.  Not only is that cheating, it is also simply foolish.  You will not have learned what you needed to learn from having done the problem set.

Problem sets may be spot graded. We hope to mark part of your problem set each week, but at a minimum you will have no less than a 25% chance of having some or all of your work graded. Note that this means you may not be graded every week, which in turn means that failing to hand in a single problem set could result in your losing a large fraction of the points allocated to problem sets. Do the problem sets, every week!


Labs will meet throughout the term as shown on the Schedule page. You must go to the lab section for which you are registered.

Each lab will comprise the design of one or more programs. Most labs will be stand-alone, but some labs will span two lab sessions.

Except for the first lab, every lab involves pre-lab work. You will need to read the lab material ahead of lab, and do the pre-lab work before coming to lab. You can get the pre-lab material by following the links from the Syllabus page. Please do not work on the main lab material prior to your lab section. You're intended to be working on the main lab during your scheduled lab time.


Attendance at lectures, labs, and of course exams is mandatory. Reading the lecture notes is not a substitute for attending lecture; material from lecture is examinable, even if it does not appear in the posted lecture notes. Likewise, material from the lecture notes is examinable, even if it does not appear in the lecture. Material from labs is examinable. If you must miss a lecture, you should get supplemental notes from a friend who attended lecture. If you must miss a lab you should complete the lab on your own; you may get help from TAs in DLC hours if needed.


The intended grading scheme for this course is as follows:

 Problem Sets20%
 Piazza Participation
 Midterm 1
 Midterm 2
 Final 25%  

  • If you do poorly on a problem set or midterm go to either TA hours in the DLC or instructor office hours right away to get help.
  • The instructors reserve the right to alter this grading scheme during the semester.
  • You must pass the labs in order to pass the course. Any student failing the labs will receive a grade of no higher than 45% for the course.
  • You must pass the final exam in order to pass the course. Any student failing the final exam will receive a grade of no higher than 45% for the course.
Recorded problem set, lab and midterm exam grades are available by selecting the Grades item in the left hand menu of this page. This will take you to UBC Connect. You should notify cpsc110-admin AT cs DOT ubc DOT ca immediately if there are any discrepancies between your recorded grade and the grade on your problem sets, labs or exams.

Policy for Requesting a Re-Grade

At times, you may feel that points were unfairly deducted during a lab, exam, or on a problem set. In this situation, you can submit your work for a re-grade. To do this, you must email cpsc110-admin AT cs DOT ubc DOT ca and include the following information.

  • Your name, student number, CS id, lab section and lecture section
  • The assignment that you'd like regraded (we have access to the problem sets and exams, so you just need to let us know which one)
  • The questions you'd like re-graded
  • Your reason for requesting a re-grade. You must read the posted solution and the grading key and let us know exactly why you think your assignment was graded incorrectly.

We encourage you to request a re-grade when a significant error was made in grading your work.  But we want to discourage you from requesting a regrade when you are just trying to get an extra point by challenging how partial credit was awarded. With that in mind we reserve the right to re-grade the entirety of any assignment submitted. Please understand that requesting a re-grade means your old grade will be scrapped and your new one could be higher or lower.

Clicker Grade

Your clicker score is based on both participation (50%) and correctness (50%).

Missed Problem Sets, Labs and Exams

As a blanket policy we will drop your lowest lab and lowest problem set grade from your final score. This gives you an automatic way to deal with a lab you could not make it to. But note that this does not excuse you from needing to know the material covered in any missed lab. All the material from all problem sets, labs, lectures, lecture notes etc. is subject to inclusion on mid-terms or the final exam. It is your responsibility to cover material you miss.

If you must miss a lab, midterm or final due to illness, then you should strive to see a doctor before the lab, before the problem set is due, or before the exam. That way you can get treatment for the illness and start getting better. You can also receive documentation showing that you were ill. You should also try to let your instructor know you will be missing the lab or midterm before the exam if possible. But in any event you must notify the course staff by emailing cpsc110-admin AT cs DOT ubc DOT ca no later than 24 hours after the lab or midterm unless the severity of your medical emergency prevents that. 

Students who miss a lab or problem set due to illness will receive their average grade on all completed problem sets and labs for the missing problem set or lab.

Students who miss midterm 1 due to illness will receive their midterm 2 grade for midterm 1.
Students who miss midterm 2 due to illness will receive their final exam grade for midterm 2.

Students who miss the final exam due to illness should consult the Faculty of Science Policy on missed exams immediately after (or preferably even before) the exam. Note that a student who does not complete sufficient labs, problem sets and midterms during the term may not qualify for academic concession if they miss the final. 

Students who have a religious observance that conflicts with a scheduled exam must notify the instructor at least two weeks prior to the exam date.

Students who have an exam clash—multiple examinations scheduled on the same day at the same time—should contact the instructor as soon as possible. The rules for how this is handled vary a bit by term, see www.students.ubc.ca/current/exams.cfm?page=policies.

How to Have Fun and Do Well In this Course

The course is not intended to be overly hard. It is not a "struggle you have to survive to get into CS". We are using programming tools that are designed to support learning and allow you to focus on the key concepts without having to memorize a ton of details. We intend to present a course that is interesting, fun and useful for majors and non-majors alike. That said, learning to analyze problems and design programs to solve them takes practice. And the course material builds on itself as the term goes along. So it is important that you keep up with the material. The How to Study page gives you concrete suggestions on how to work most effectively in this course. 

Academic Honesty

The Department of Computer Science has a detailed policy regarding collaboration on academic work. You must familiarize yourself with that policy. In 110 our specific rules about collaboration are as follows:
  • You may work through lecture problems and practice problem sets alone or together with any number of other students. In fact we encourage you to work with others to help learn the material.
  • You may work on each problem set alone or together with one other student, this person will be your partner. If you work with a partner you must hand in a single shared assignment. (See Problem Sets above.) You may not collaborate with anyone except your partner for problem sets.
  • You may change partners through the term, but each problem set must be done either alone or with a single partner.
  • Course staff will not discuss any graded problem sets with you. Messages to the forum about graded problem sets should only be about supposed mistakes in the problem set.
  • No collaboration of any kind is permitted for pre-labs, labs, mid-terms or the final exam. All pre-lab, lab, mid-term and final exam work must be completed entirely on your own. You may discuss your pre-lab and lab work with course staff.
  • You may not copy any solutions that we have posted and use them in your problem sets, labs or pre-labs. All work that you submit in CPSC 110 must be your own work, and you must start the design from scratch, or from a starter file that we give you. This means that you may not copy our solutions, edit them, and submit them as your own work.

All breaches of this policy will be reported, in writing, to the Dean of Science’s office.