Navigation







This work is licensed under a Creative Commons Attribution-ShareAlike 2.5 License.  This grants users the rights to share the work and to adapt the work, but to attribute the work as we specify.  Additionally, users may subsequently distribute their variations, too.

Computation, Programs and Programming

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

The major goal of this course is to introduce students to the practice of systematic problem solving through the design of programs. The course will also help you understand more deeply how computation and programs work, and how they have the power to do what they do. Do you know how to build a collaborative online world like Second Life, or a game like The Sims? What about Twitter? Or Ocarina? Do you know how to use the process of writing a computer program to better understand a problem like an ecosystem or Translink schedules? This course will show you how -- we will explore systems like these as part of our lab projects.

The course presents an approach to systematic problem analysis and solution design, and prepares students for further course-based and/or independent learning of Computer Science skills and concepts. The course is designed to be interesting, accessible and useful to a wide range of students. No prior programming experience is assumed, so it is appropriate for first year students—majors and non-majors alike—who wish to explore the intellectual ideas and practical utility of the field.


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


Prerequisites

The course assumes a basic familiarity with arithmetic and algebra. It demands curiosity, self-discipline, and some amount of people skills, because all computer scientists end up working with others interactively all the time.

Schedule

Consult the syllabus for a detailed schedule of readings, labs, mid-terms etc. The following is an overview of the schedule.

Lecture:

Section 101  T/Th   9:30 - 11:00   DMP 310    Instructor:  Gregor Kiczales

Labs:

L1A    W     2:00 - 5:00    ICCS 014
L1B    Th    2:00 - 5:00    ICCS 014
L1C    F      9:00 - 12:00  ICCS 014


Office Hours and Demco Learning Center (DLC) Hours:

Gregor KiczalesMondays 12:00 - 2:00, but feel free to come by anytime, ICCS 311.
Kimberly Voll: Mondays 12-1:30, Tuesdays 2-3, but feel free to come by any time, ICCS 241.
Ryan Golbeck: Thursday, 11:00-1:00, DLC.
Nathan Taylor: Tuesdays, 11:00-12:30, DLC.
Asumu Takikawa: Mondays and Wednesdays, 10:00 - 12:00, DLC.
Andrew Tjia: Fridays, 12:30-2:30, DLC.


Mid-Terms:

October 7th       5:00pm to 6:30pm   DMP 310
November 4th    5:00pm to 6:30pm   DMP 310

Required Materials

Texbook

The textbook for the course is the 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 also online at http://htdp.org.

The second edition is
available online only at http://www.ccs.neu.edu/home/matthias/HtDP2e/index.html. It is actually being written this summer, so it is not yet available in printed form. The second edition (2e) will not be a completely new book -- it starts with some significantly revised chapters, and the whole book will include new examples, problems and some new material. But it will largely resemble the original version (1e).

If you are comfortable working with just an online book, we recommend that you simply bookmark the 2e and original editions and read from them.

Computer Account and Computer

If you have your own laptop or notebook computer, and you feel comfortable bringing it to class, then please do so. We will do a lot of interacive work with the computer during both lecture and labs. If you do have such a computer, then you might want to get a UBC Campus Wide Login account before the first class. (Follow the directions for a standard account.) Other aspects of setting up your machine will be done as part of Lab 0.

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.

iClicker

This course will use a Classroom Response System called i>clicker. This TV-like remote will let your class respond to instructor questions. Please purchase a clicker at the bookstore and bring it to each class.


Course Announcements

Please sure to follow the CPSC 110 Google Group closely for bulletins posted by instructors as well as questions asked (and often answered) by students. (Adding yourself to this group will happen during Lab 0.)

Homework

Homework will be assigned every week, in some cases before every lecture. The purpose of this homework is to allow you to practice with the material we are studying to make sure you have mastered it and are ready to get the most out of class.

Labs

Lab will meet every week except the two mid-term weeks. Please go to the lab for which you have registered.

Each lab will comprise the design of one or more programs. Most labs will be stand-alone, but we may also have labs which build up a larger program over the course of several weeks.

Except for the first week of class 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 lab material by following the links from the Syllabus page.

Your lab work will be done using a technique known as Pair Programming. In pair programming two (or three) people work together. They take turns between sitting at the keyboard and typing in code, vs. observing, reviewing code as it is typed, and formulating strategy. Studies have shown that pair programming improves learning, which is one reason we use it in this course. Studies have also shown that it produces better (higher reliability, more valuable) software products, which is one reason a number of companies also use the approach.

Grading

The intended grading scheme for this course is as follows:

 Labs25%
 Midterm 1
15%
 Midterm 2
15%
 Final40%
 Class Participation
5%

The instructor reserves the right to alter this grading scheme during the semester. Any such change will be announced in class, and will be intended to improve student grades by, for example, reducing the impact of a mid-term question that is too hard or something like that. The class participation score includes clicker questions and other kinds of participation during lecture.


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 a language and editor that is 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 provides a solid foundation 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 following practices will help you do well and enjoy the course:
  • Come to all classes and labs. If you must miss a class be sure to get notes from a fellow student as soon as possible.
  • Do the assigned reading. Skim the reading for each lecture before the lecture, and then go back and read it more carefully after the lecture. This will allow you to follow lecture more effectively by already having some idea of the content.
  • Take notes quickly during lecture, then go back after lecture to revise them. This will allow you to listen and participate more actively during class.
  • Use active reading techniques to get more out of your reading.
  • Do the exercises in the book. Don't just read them, or talk about them with your friend. Actually solve them, either by hand or using a computer as specified by the problem.
  • Allocate time to work on 110 daily. Some of this material takes time to sink in. Spending 30 minutes a day will do more for you than spending four hours once a week.
  • Talk with fellow students about the material. Exams and certain material you hand in must be done by you alone. But talking with other students about lectures, practice problems and other material not designated as needing to be done by you alone is an excellent way to improve your understanding of the material.
  • Come to office hours right away if you have a problem.
  • Remember that this is a four credit course. You should expect to spend more time on it than for your three credit courses.

Academic Honesty

The Department of Computer Science has a detailed policy regarding collaboration on academic work. All Computer Science students should familiarize themselves with that policy.

With respect to this course, Lab Projects will be done in assigned pairs (or triples) -- you and your partner will work together, and will hand in a single assignment with both of your names on them. This practice, known as pair programming, has been shown to to improve  learning outcomes, as well as to reduce costs and increase quality in industry settings.

Other work, including homework, in-class clicker questions, midterms and the final exam are to be done individually.

As defined in the department policy, there is room for permitted collaboration between pairs and on homework assignments. No collaboration of any kind is permitted for in-class clicker questions, mid-terms or the final exam.



Because you have read this entire course syllabus, you know that this last sentence includes the number 27.