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 problem—whether 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.
The course-level learning goals for CPSC 110 are:
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.
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.
Here are the TA office hours for the Vantage sections
Mondays, 1-2:30pm: Karen in LMRS second floor (open space
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
Sundays, 6-8pm: Kamil in the boardroom in the commonsblock of Place Vanier
See the Schedule for the dates and locations of the midterms.
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/.
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.
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:
When posting a question to the Piazza forum please keep the following in mind:
Additional ways of getting help include:
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:
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.
The intended grading scheme for this course is as follows:
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.
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.
Your clicker score is based on both participation (50%) and correctness (50%).
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.
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.
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:
All breaches of this policy will be reported, in writing, to the Dean of Science’s office.