Computer Science 150

Introduction to Computer Science

Fall 2015

  web page:


Bob Geitz, King 223A


Office Hours:

Monday 10-12, Tuesday 2:30-4, Friday 1:30-2:30,

or by appointment. I am around most of the day when I am not in class or lab and I am happy to talk to you. The only exception is Wed 10-2:30, when I am grading prelabs.


This is an introduction to Computer Science and algorithmic thinking. In this class you will learn to program in the language Python, but you will learn many other things as well. This is as much a class about problem-solving as it is about programming and the class concepts can be applied to every academic discipline. The class is self-contained; we do not expect you to have any prior programming experience. The class does move quickly and it builds on itself; this is not a class to fall behind in.


John Zelle, Python Programming: An Introduction to Computer Science 2nd edition. Franklin-Beedle & Associates, , 2010.

This is the most readable book I have found on Python. Beware of editions -- this second edition refers to the Python 3 language which we'll be using in this class. There is a first edition still available that refers to Python 2, which we won't be using. The two versions of Python differ in small but significant ways. You will find the first edition of Zelle's book very confusing because none of its code will work in our systems.


The Labs:

We will have 11 labs, most of which have prelab assignments and all of which have postlabs.. These are not optional. Much of your grade and almost all of your learning will be determined by your work in the labs. Every week the lab assignment from the previous week is due by 6pm Tuesday, and the next prelab is due in class on Wednesday. Because the prelab is designed to prepare you for that week's lab, I won't accept late prelabs. Either get them in on time or lose the (small number of) points for the prelab.


I expect you to have read over the lab materials before you come to the lab session. The lab assignment you will hand in electronically; these are due by 6pm each Tuesday. I will accept late labs, though there is a penalty of 10 points per day (out of a total of 50 possible points for each lab), only until midnight on Friday. There is a reason for this penalty -- the lab is where most of your learning will take place. The labs build on themselves. You can't do one lab until you have done the previous labs, so if you are late with one and start to fall behind, the situation just gets worse and worse. The penalty is an encouragement to not fall behind. You can have 3 "late lab extenstions" over the semester; these allow you to hand in the lab up to Friday at midnight with no penalty.


The postlab assignments are very simple -- I ask you to answer one question: "What did you learn from this lab?" and then supply any additional comments about the lab that you wish to share. I want these on paper, not in email, and they can be brief, hand-written and sloppy as long as I can read them. These are due in class each Wednesday along with the next prelab. Learning is improved by reflection; these postlabs are just an opportunity for you to reflect on the work you just completed.


How long the labs take varies from student to student and from lab to lab. Most students should be able to complete the prelab assignments in an hour, and the lab assignments in 6 to 7 hours, including the 2 hours you spend in the lab itself. Programming is one of those activities where trying to rush actually makes you go slower. If you are organized and careful you will find that you finish the labs faster and they will be much, much more enjoyable than if you try to get them done quickly and end up spending hours debugging.

Exams and Grading:

We will have 2 in-class exams during the semester and a comprehensive final exam. Here is how the grades for the course will be composed:

Note that the final exam will be Wednesday, December 16 at 2PM. This time is set by the Registrar and I cannot change it for the class or for individuals. If you have issues with this time you should talk to the Dean of Studies immediately.



There are lots of ways to get help with this class. One is by talking to me. I am around just about all day Monday-Friday and this is the only class I am teaching this semester. You can talk to me outside of my posted office hours, but it might help to let me know you are coming. I and Professor Alexa Sharp will be in the labs during the lab sessions along with several student helpers. There are also evening and weekend lab helpers who can help you with the labs. I will post their schedules on the class web page

The Honor Code

The Honor Code has a straightforward application to this class. On all of the exams you are responsible for your own work; you may neither give nor receive any information during the course of the exam. If someone takes an exam at a different time than the rest of the class there may be no communication concerning the exam between that person and anyone else in the class, not even whether the exam was easy or difficult. The atmosphere is much more relaxed for the lab assignments. You may discuss the labs, including details of the programming code, with anyone else in the class, but in the end you must write your own code. Making a copy of someone else's code and handing it in as your own, even if you change the names of the variables in the program, is a violation of the Honor Code. You should be learning to think structurally about code, so talk to anyone about functionality and then write the code yourself.

Course outline: Here are some thoughts about what we'll do this term, though all of this is subject to change.

Week Day Topic/Reading HW/Labs
Week 1

Aug 31-Sept 4

Course Overview.
Introduction to Python
Data types, program structure
Conditional statements
Read Text: Chapters 1, 2
          Notes: Chapters 1, 2

Lab 1: Hello World!

Week 2 Sept 7-11

Loops and Lists
Read Text: Chapter 8
          Notes: Chapter3

Postlab 1
Prelab 2
Lab 2: The Basics

Week 3 Sept 14-18

Simple grapphics
More with lists
Read Text: Sectons 5.1 to 5.6
          Notes: Sections 6.2, 7.4

Postlab 2
Prelab 3
Lab 3: Loops and Graphics

Week 4 Sept 21, 25
No class Sept 23

Program Design
Read Text: Chapter 6
          Notes: Sections 4.1, 4.2, 4.3

Postlab 3
Prelab 4
Lab 4: Functions, Pictures, and the Mastermind Game
Week 5 Sept 28-Oct 2

Reading from Files
Parameters, Arguments and Returns
Read Text: Chapter 6, Section 13.2
          Notes: Sections 4.4, 4.5, 7.1, 7.3

Postlab 3
Prelab 4
Lab 4: Functions, Pictures, and the Mastermind Game

Week 6 Oct 5-9 Designing code with functions
Exam 1

Read Notes: Chapter 4 again

Postlab 4
Prelab 5
Lab 5: Recursion
No lab this week!

Week 7 Oct 12-16 File I/O
Read Text: Sections 5.8, 5.9
          Notes: Chapter 7
Prelab 6
Lab 6: Scavenger Hunt
Week 8 Oct 26-30

Data Structures: dictionaries and sets
Read Notes: Chapter 6

Postlab 6
Prelab 7
Lab 7: Data Structures and Concordances

Week 9 Nov 2-6 Classes
Read Text: Chapter 10
          Notes: Sections 8.1, 8.2
Postlab 7
Prelab 8
Lab 8: Data Structures and Wordgames
Week 10 Nov 9-13 Objects, Methods and Constructors
Exam 2
Read Text: Chapter 10
          Notes: Sections 8.2, 8.3
Postlab 8
Prelab 9
Lab 9: Digital Audio
Week 11 Nov 16-20 Subclasses and Inheritance
Read Text: Chapter 12
          Notes: Section 8.4

Postlab 9
Prelab 10
Lab10: The Critter Tournament

Week 12 Nov 23-25

Object-Oriented Design
Read Notes: Section 8.5

Postlab 10
No lab this week!

Week 13 Nov 30-Dec 4

Object-Oriented Design
Reread Notes: Chapter 8

Lab 11: Multiprocessing
Week 13 Dec 7-11  


Final Exam: Wednesday, December 16, 2 PM