CPSC 120 Principles of Computer Science Fall 2016

CPSC 120 Course Information

Course Description

This course is an introduction to computer science. What does that mean? Programming is a key element of computer science, so we'll spend a fair amount of time thinking about and doing programming. But programming isn't all there is to computer science - the "principles" referred to in the course title include concepts like representation and abstraction and computability and skills like logical thinking and algorithm development.

This course will focus on graphics and animation, with an emphasis on how we might write programs to replicate aspects of the natural world. Through labs and projects, students will program increasingly sophisticated interactive animated "sketches" which will showcase the concepts introduced in the course.

This course is appropriate for students who are interested in computer science as well as those interested in employing computers in the creation of art (e.g. majors or minors in art, media and society, etc). No background in computer science or computer programming is necessary or expected. (If you've had previous programming experience, you should take CPSC 124 instead.) The course is intended to be taken by non-majors as well as those who might be considering majoring or minoring in computer science but want to test the waters before taking CPSC 124. (For those who continue on in computer science, this course will give you a head start by introducing concepts and skills that you'll revisit in CPSC 124 and later courses. CPSC 120 can also be counted towards the CS major or minor if taken before CPSC 124.)

Note that this is not a course on general computer skills or on how to use particular software applications like Word or Excel. While you will gain experience and skills that will increase your computer literacy, the emphasis in this course is on the science of computing rather than on how to use a computer.

This is also not a programming course as such. While a good deal of time will be spent programming and talking about programming, programming concepts will be introduced to service our twin goals of exploring key principles of computer science and creating nifty pictures - concepts will not be covered as broadly or as deeply as they would be in a course whose goal is proficiency in programming. Students who wish more programming experience after completing CPSC 120 should take an introductory programming course such as CPSC 124.


Students who have previous programming experience should take CPSC 124 instead.

Course Web Page

You are expected to regularly consult the course web page for readings, assignments, and most handouts.


Learning Processing, 2nd edition
Daniel Shiffman
Morgan Kaufmann, 2015
ISBN 978-0123944436

The textbook is required, and should be purchased from the College Store or elsewhere. We will begin using the book right away so you should obtain it promptly. Chapter 1 is available as a PDF download from the book's website (use the "Download Sample" link) but be aware that we'll be on to chapter 2 by the end of the first week of class.

Note: you are strongly encouraged to get the 2nd edition as there is some new and updated material, and reading assignments and material discussed in class will reference this edition. However, if getting the 1st edition instead is the difference between getting the book and not getting the book, the 1st edition will suffice - the core content is there.

Additional material will be handed out in class or posted on the course webpage.

Recommended Materials

If you have a laptop computer, you should bring it to class on lecture days. Bringing a laptop to lab is optional (you can use the lab computers).

In addition, you will find it useful to have a notebook for taking notes in class and a folder to keep track of class handouts.

Aims and Objectives

As stated in the course description, this course is an introduction to computer science. The course has three broad goals:

  • To introduce students to fundamental computer science concepts and aspects of computational thinking.
  • To introduce students to computer programming in at least one problem-solving paradigm.
  • To excite students about computer science.

By the end of the course, the successful student will be able to:

  • define, explain, and give concrete examples of terms like algorithm, representation, decomposition, abstraction, modularity, efficiency, and computability
  • decompose complex scenes and tasks into smaller parts, choose appropriate representations, and utilize abstraction and modularity to simplify the task
  • use programming constructs like variables, conditionals, loops, arrays, functions, and recursion
  • create nifty interactive animated graphical programs
  • describe some of the many applications of computer science, and have an idea of how it is possible for programs to do all that

The course contains an element of quantitative reasoning (Goal 3), in that numbers are used to express coordinates, sizes, velocities, and so forth and appropriately-sized values must be chosen. The course also contains an element of artistic expression (Goal 5), in that students learn how to create animated scenes algorithmically, and also are encouraged to be creative with the scenes they construct.


This course uses a programming language called Processing. Processing was developed specifically for people who want to program using graphics, images, interaction, and animation but who don't know anything about programming. One of the exciting things about Processing is that you can create very sophisticated-looking programs much more easily - and with a lot less knowledge - than you can in most programming languages.

Another nice feature of Processing is that it is free and is available for Windows, Mac OS X, and Linux. This means that you can install it on your own computer to use during the course (and can continue using it afterwards).

A third reason for choosing Processing for this course is that under the hood, it is really the same as the powerful and well-known language Java. (Processing just strips and out simplifies a lot of the tricky stuff Java makes you do so you can create nifty graphical programs from day one.) This means that should you decide to continue on in computer science, what you learn in this course will give you a good head start in CPSC 124.

Active Learning

Computer science and programming are subjects best learned by doing. Class time will frequently be used for active discussions/problem-solving and for hands-on group activities to explore new concepts. Friday lab sessions will be an opportunity for students to integrate concepts from the readings and from class into larger units, with the chance to get help from other students and/or the instructor.

Time Required

The out-of-class workload for the course consists of the following:

  • readings, for most classes - typically around 10 pages, with examples and illustrations breaking up the text but new concepts and examples to absorb
  • weekly labs, which you get started on during the lab period
  • two projects, with about two weeks spent on each project (during which time there will still be regular readings and weekly labs)
  • studying for two midterm exams and a final exam - best done by keeping up with the course material and completing the assignments rather than cramming at the last minute

Students most often report spending 5-7 hours per week outside of class, but this can vary substantially depending on individual skills, willingness to seek help, and personal motivation. Going beyond the bare minimum needed to complete the assigned work will enhance your learning of the material, and also reduce the time needed for later assignments. Regardless of whether you do the minimum or strive for more, it is essential that you budget sufficient time before the last minute so that you can seek help if you get stuck. The course material is cumulative, so turning in a half-completed assignment because you couldn't figure something out means that the next topic will be that much harder.

Valid HTML 4.01!