CPSC 120 Principles of Computer Science Fall 2023

CPSC 120 Course Information

On this page:


Course Description and Objectives

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.)

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.

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 primary 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.

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


Prerequisites

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


Class Format

Computer science and programming are subjects best learned by doing. Most "lecture" class periods will be a combination of lecture, interactive examples, and hands-on group activities to practice applying the material. Friday lab sessions will be an opportunity to integrate concepts from the readings and from class into larger units.


Assignments and Evaluation

Readings: Readings are an important component of this course - they are your first exposure to new material and provide the basis for the examples worked on in class. It is important to make an effort to understand the reading and the examples, which means that you may need to read over things multiple times. Trying some of the exercises in the book is also valuable as that can reveal that something that seemed clear when you read about it isn't actually that clear. Core readings are to be completed for the class period where they are listed on the schedule page; those labelled "supplemental" or "optional" can be read after class. (Supplemental readings are still expected; optional readings are encouraged for greater depth but are not required.)

Labs: Hands-on practice is essential for learning and mastery, and labs provide an opportunity to apply the material for yourself. Friday's class periods will be used as lab sessions. Lab assignments will be posted on the schedule page prior to each lab session; your time in lab will be most effective if you read through the lab handout before lab and come prepared with any questions that may have arisen. You will generally not be able to complete all of the lab exercises during the lab period and should expect to spend time outside of class finishing them.

Projects: There will be two projects in addition to the weekly labs. The projects will require somewhat larger and more sophisticated programs than the labs, and will integrate several concepts. Projects will be completed outside of class.

Exams: There will be two midterm exams and a final exam. The midterms will be held during regular class periods and the final will be in the registrar-assigned final exam period. Dates and times are posted on the schedule page - be sure to consult this schedule before making travel arrangements!

Engagement and Participation: Learning isn't a passive activity where you sit back and watch someone else do things; you need to work with the material by thinking about it, trying to apply it, asking questions about it, and so forth. You are expected to be engaged in the course - this includes being prepared for class by having done the reading, making meaningful contributions to class by asking or answering questions, actively contributing to group activities (not sitting back and letting others do everything), being on task in class and lab, and going to office hours and/or Teaching Fellows. Disruptive behavior (such as walking in and out during class absent an emergency, ringing cell phones, or disturbing others) will also lower your participation grade.

Grades: Grades in this course will be computed as follows:

  • Labs: 40% (approx. 3.3% each)
  • Projects: 25% (12.5% each)
  • Exams: 25% (midterms 7.5% each, final 10%)
  • Participation: 10%

If you are concerned about your grade, you are strongly encouraged to come to office hours or Teaching Fellows to get help with any material you may be struggling with. Staying on top of things and seeking help as soon as possible when you need it is the best route to success.

Extra credit: There will be opportunities to earn extra credit on projects and some labs by going going above and beyond the requirements of the assignment and/or tackling some harder problems. You are encouraged to take advantage of these opportunities to challenge yourself! You can also earn extra credit by attending relevant talks (see below). No additional extra credit assignments or special extra credit opportunities will be given - the time to worry about your grade is during the term, not at the end.

Talks: The Math/CS Department has an occasional colloquium series and there are many other speakers on campus throughout the semester. You can earn extra credit for attending talks relevant to this course - these will be announced as I hear of them. (You can get a small additional bonus for suggesting a relevant talk not part of the math/CS colloquium series.) To get credit for attending a talk, you must be present at the talk and must submit a clearly-written and substantive three-paragraph writeup within one week of the talk: one paragraph summarizing the talk, one paragraph discussing what you learned from the talk, and one paragraph explaining why the talk is relevant to this course.


Time Expectations

You are expected to attend all scheduled class and lab meetings (3 hours per week), and should expect to spend approximately 8 hours per week on average (*) on additional work (readings, labs, projects, studying) outside of class. Readings will generally be posted a week or so in advance and you can expect a new lab each week. Dates for the projects and exams can be found on the schedule page.

In addition, you are expected to attend at least 5 hours of additional (outside of class) facilitated learning experiences over the course of the semester. This requirement can be met by attending Teaching Fellows hours, by coming to office hours, and/or by attending (approved) relevant talks and submitting a writeup. (5 hours = e.g. one hour of TFs every three weeks, or a 20-minute visit every week)

(*) The assigned work is intended to take about this much time, though your experience may vary. However, if you routinely spend much less time, you may not be successfully mastering the material - or you should challenge yourself by tackling some of the extra credit! - and if you routinely spend substantially more time, especially if you feel like you are spinning your wheels and not making progress, you should visit the Teaching Fellows and/or office hours for help.


Course Materials
Textbook

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.

Laptop

If you have a laptop that you are able to bring to class on lecture days, you are encouraged to do so. (It's OK if you don't; in-class activities will be done in small groups so you can team up with someone who does have a laptop.)

Software

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 advantage of Processing 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.)

Processing is available on the computers in Rosenberg 009 (which we'll be using for lab sessions) and in the Math/CS department lab in Lansing 310. It can also be downloaded for free and is available for Windows, Mac, and Linux so you can install it on your own computer if you want.

Other Materials

You will likely find it useful to have a notebook for taking notes in class and a folder for keeping track of class handouts.