CS 161: Introduction to Programming and Problem-Solving

Term: Winter 2014
Credits: 4
Section: 1
Meeting Time: Monday, Wednesday 14:00-15:50 (2:00-3:50 PM)
Meeting Location: School of Business Adminstration (BA) room 190

Instructor: Bart Massey (bart AT cs DOT pdx DOT edu)
Instructor Office Hours: Fourth Avenue Building (FAB) 120-18, Tuesdays 10:00AM-noon or by email appointment
TA: Yu Yang (yyang AT pdx DOT edu)
TA Office Hours: Fourth Avenue Building (FAB) "Fishbowl" (outside Suite 120), Thursdays 14:00-16:00 (2-4 PM)


Everything about this syllabus is entirely tentative, and maybe be changed at the whim of the instructor without warning.


The Course Catalog says:

Introduction to fundamental concepts of computer science. Problem solving, algorithm and program design, data types, loops, control structures, subprograms, and arrays. Learn to write programs in a high level programming language.
We will learn to program in the Python programming language. In addition, we'll learn some things about how computers work, and how to make use of computer programs. Finally, we'll learn some things about how to learn and practice computer science in a University setting.

Goals, Topics and Objectives

After this course, the successful student will:
  • Be able to explain the operation of a Python program in terms of the underlying computer.

  • Be able, given an appropriate problem, to design, implement, and validate a Python program that solves that problem.

  • Practice good software development methodology, including writing quality code, using incremental version control, and backing up work.

  • Be able to articulate the difference between a program and an algorithm; be able to develop simple algorithms on their own.


Michael Dawson, Python Programming for the Absolute Beginner, 3rd ed, Course Technology 2010.

Course Communication

This course is being run using the Moodle open-source web Learning Management System software. Details of schedule, and news and announcements will be posted there, assignments will be distributed and collected there, etc. In addition, the course email list will be created from the information there.

It is thus vitally important that you register on this site at promptly at the beginning of the quarter. Instructions will be given in class as to how to do this. Anyone who fails to register by the start of the second week of class will be summarily dropped from the course.

Course Work


This course requires weekly readings and both in-class and out-of-class homework. All coursework must be completed individually unless otherwise explicitly specified. I do encourage group collaboration on individual assignments: creating study groups or online chat-rooms to discuss the approach and understand the problem is acceptable and encouraged. The write-up, programming, and actual solutions must be your individual work. If you represent someone else's work as your own, you are committing plagiarism.

You are learning to program a computer. This is supposed to be fun. If it isn't, you should arrange to talk to me. However, this is a time-consuming activity. Expect to spend 1-2 hours per day outside of class, 5 days per week, if you are going to keep up with the course and learn what you need to learn. You will need to spend that time sitting in front of a computer. Ideally, you will have a laptop or desktop system of your own to use. Failing that, there are CS Linux and Windows laboratories you can use.


Class attendance is required. There will routinely be in-class assignments; these will not be accepted late without advance notice or extraordinary circumstances. If you think you might miss more than a couple of class meetings of this course, I would encourage you to avoid this class for now.

Test and Testing Policy

There will be take-home midterm and final examinations, as well as (potentially) in-class quizzes.


I may assign graded in-class homework during some meetings. I will also assign take-home homework every week, both as a study guide and as a part of your grade. Late homeworks will not be accepted: this class is too large to deal with them. Take-home assignments will be collected using the course website, and will be graded by the TA.

Assignments will be graded for correctness, but also for code quality. We may go through some of the problems during the class, as a part of the learning experience.


Your grade will be computed as follows:

   Homework     60%
   Midterm      20%
   Final        20%


There will be no make-up exams except in a case of medical or family emergency. (The instructor reserves the right to request documentation in this case.) It is your responsibility to contact the instructor and arrange for special accommodations.

Academic Honesty

Cheating on homework or exams will result in a grade of zero on the affected material, and will be reported to appropriate authorities. Plagiarism is a form of cheating. Please do not let me catch you plagiarizing.

Plagiarism: n 1: a piece of writing/work that has been copied from someone else and is presented as being your own work 2: the act of plagiarizing; taking someone's words or ideas as if they were your own.

If you use code, ideas, or text authored by someone else, cite them. It is OK to get help from external sources of knowledge, but citation is mandatory.

Study Guide

(Thanks to Martin Cenek for the original version of these tips.)

  • Study at least an hour every day. You cannot learn the material in a day.

  • Get comfortable with Python as quickly as possible.

  • Do lots of problems, and then some.

  • Do additional problems - ones that were not assigned.

  • Make study groups.

  • Make up your own problems and try to solve them.

  • Start early on the assignments.

  • Review the topics frequently—not just the increments, review entire topics.

  • Read the assigned chapters before each lecture.

  • Don't expect immediate success. Anything worthwhile takes time and effort

Last modified: Wednesday, 15 January 2014, 8:39 PM