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. PrerequisitesThe 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. ScheduleConsult 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 KiczalesLabs:L1A W 2:00 - 5:00 ICCS 014L1B Th 2:00 - 5:00 ICCS 014 L1C F 9:00 - 12:00 ICCS 014 Office Hours and Demco Learning Center (DLC) Hours:Gregor Kiczales: Mondays 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 310November 4th 5:00pm to 6:30pm DMP 310 Required MaterialsTexbookThe 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 ComputerIf 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. iClickerThis 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 AnnouncementsPlease 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.)HomeworkHomework 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. LabsLab 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 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 CourseThe 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:
Academic HonestyThe 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. |
