Course Syllabus

Meetings: MTWF 8 - 8:50 AM, Olin 124
Instructor: Janet Davis (
Office hours: As posted and by appointment
Class mentor: Melissa Kohl
Mentor sessions: Mondays 8-9 and Thursdays 7-8 in Olin 124
Lab hours and lab aide hours

See also Learning Activities and Course Policies

About this course

Welcome to CS 167! The official course description:

Students will learn to design, document, implement, test, and debug algorithmic solutions to computational problems in a high-level, object-oriented programming language. We introduce core concepts: algorithms, data structures, and abstraction. We apply foundational constructs common to all programming languages: data types, variables, conditional execution, iteration, and subroutines. Students will gain experience with exploratory and structured approaches to problem solving through collaborative in-class exercises. Frequent programming projects will address applications of computing to problems arising from other disciplines.

A course very much like this is the reason I became a computer scientist.  I'm excited to teach this course, and I hope to share some of that excitement with you. 

My main goal for this class is that you will begin to learn how computer scientists solve problems. We will be using Python as our first programming language. Python is relatively easy to learn. It is widely used to solve problems across many domains, including professional software development.

Course goals

By the end of this class, you will:

  • become familiar with big ideas of computer science, including algorithms, data, abstraction, and efficiency;
  • understand and apply basic elements common to all programming languages: data types, variables, functions, iteration, and conditionals;
  • construct clear, well-commented, modular computer programs;
  • carefully test and debug computer programs;
  • independently find libraries, examples, and tutorials online to help you with your own projects;
  • be ready to use Python to solve computational problems you encounter beyond this class;
  • sharpen general problem-solving skills;
  • consider some of the historical and contemporary social context of computing.

How to be successful in this class

Experience suggests that learning computer science uses different parts of your brain than other courses (even math and science courses). Learning to program is difficult for many people, but with mindful practice you can succeed. Be patient with yourself. Expect some frustrating times, but have confidence that you can work through them. You'll come out of the course with new skills and knowledge.

Like learning math or a foreign language, learning in this course is cumulative: New ideas often build on ideas from earlier in the course. Make sure you understand key ideas. Review readings, notes, and exercises after class. Take the quizzes seriously. Try some extra problems on your own. If you feel like you've missed something important, please come talk with me ASAP.

Computers have no common sense or compassion. They are complex systems, and sometimes they do things we don't expect. If things break, it's probably not your fault.


Thanks to Andy Exley and Albert Schueller for informing the content and learning activities in this course. Thanks to Albert Schueller, Jerod Weinman, Henry Walker, and Samuel A. Rebelsky for informing course policies and advice to students.

Course Summary:

Date Details