CSCI51p provides an introduction to the field of computer science using the Python programming language. Topics include iteration and recursion, basic data structures, sorting and searching, elementary analysis of algorithms, and an introduction to object-oriented programming. This course will place special emphasis on working with and making sense of data in order to connect course material with applications in other disciplines. By the end of this course we hope you have a good basic understanding of how to develop (design, code, and debug) medium-sized programs in Python, and have a basic understanding of how one might analyze programs for correctness and efficiency.

There are no prerequisites for this course. In fact, we assume that you have no previous computer programming experience in any language. If you have had significant previous experience, please talk to an instructor, as CSCI54 may be more appropriate.


The professors for this class are here to help you succeed. Please don't hesitate to reach out to us via email or to stop by during our office hours! Professor Chen (Edmunds 223; office hours Mon 9-10am, Tue 1:30-3pm, Thu 9-10am, or by appt) and Professor Li (Edmunds 111; office hours Mon/Tue/Wed 4:15-5:15pm, or by appt) will be giving the lectures. Professor Ye (Edmunds 115; office hours Thu 2-3pm) will be running the labs.

We have a great group of mentors/TAs: Claudio Castillo, Tonya Chivandire, Sophy Figaroa, Summer Hasama, Caleb Kim, Filiana Kostopoulou, Harper Noteboom, Vadym Musilenko, Kartika Santoso, Lawrence Stampino-Strain. Some of them will be in lab and others will hold mentor hours; some of them just took the class last semester and others are graduating seniors. Mentor hours are located on the 2nd floor of Edmunds (either in the lab rooms or the common space). They will serve as great resources, so please get to know them!

The Quantitative Skills Center (QSC) has a QSC Partner program that provides one-on-one support to students in a variety of STEM courses, including cs51p. You can schedule an appointment with a QSC mentor here.

We'll be using Canvas for distributing course materials (e.g. lecture slides, assignments) as well as making announcements. We'll be using Slack for informal discussion. We'll be using Gradescope for submitting and returning assignments. Let us know if you run into issues accessing any of these.

While there is no official textbook for the class, the following are some resources that you may find useful.


The basic flow each week will be as follows:

Attendance at lectures is highly recommended, but not required. We will, however, be taking attendance at labs so you should plan to be at those. Please make sure to attend the lab section in which you're enrolled.

There will be a weekly assignment. The assignments will typically consist of two parts. The first part should be done in lab and must be checked off during your assigned lab time. You may (and are strongly encouraged to!) start on the second part in lab as well, but the second part will not be due until 10pm on Fridays. On every assignment you will be allowed an automatic extension until 10pm on Saturday, however anything beyond that will require documentation of exceptional circumstances that could not have been anticipated.

There will be three in-class, written checkpoints as noted in the calendar below.

Finally there will be a final project due by 10pm on Wednesday 5/1 (for graduating seniors) and by 5pm on Wednesday 5/8 (for everyone else).

The breakdown of grades will be as follows:

If you need accommodations please contact the Disability Coordinator on your home campus. The process for Pomona students is available here. More generally, if there is anything that is preventing you from participating fully in the class as it's designed, please talk to one of the instructors so that we can work with you!


This is a high-level outline of the planned schedule. Note that the calendar is subject to change.

Unless stated otherwise, all deadlines are at 10pm on the given date.

Week Day Date Topic Due
1 W 1/17 intro to cs51p, python, data assignment 0
2 M 1/22 expressions: operators, variables, input()
M/T 1/22-23 lab 1: setup assignment 1 - part 1
W 1/24 booleans, conditionals
F 1/26 assignment 1 - part 2
3 M 1/29 loops
M/T 1/29-30 lab 2: introduction assignment 2 - part 1
W 1/31 loops
F 2/2 assignment 2 - part 2
4 M 2/5 loops, functions
M/T 2/5-6 lab 3: password assignment 3 - part 1
W 2/7 functions
F 2/9 assignment 3 - part 2
5 M 2/12 functions
M/T 2/12-13 lab discussion
W 2/14 *** checkpoint 1 ***
6 M 2/19 memory, stack
M/T 2/19-20 lab 4: credit card assignment 4 - part 1
W 2/21 recursion
F 2/23 assignment 4 - part 2
7 M 2/26 recursion
M/T 2/26-27 lab 5: recursion assignment 5 - part 1
W 2/28 strings
F 3/1 assignment 5 - part 2
8 M 3/4 strings, file I/O
M/T 3/4-5 lab 6: text processing assignment 6 - part 1
W 3/6 debugging, testing
F 3/8 assignment 6 - part 2
9 M 3/11 *** no class - Spring break ***
W 3/13 *** no class - Spring break ***
10 M 3/18 intro to data structures, lists
M/T 3/18-19 lab 7: image processing version 1 assignment 7 - part 1
W 3/20 lists
F 3/22 assignment 7 - part 2
11 M 3/25 nested lists
M/T 3/25-26 lab 8: image processing version 2 assignment 8 - part 1
W 3/27 exceptions
F 11/10 assignment 8 - part 2
12 M 4/1 dictionaries
M/T 4/1-2 lab discussion
W 4/3 *** checkpoint 2 ***
13 M 4/8 data visualization
M/T 4/8-9 lab 9: data visualization assignment 9 - part 1
W 4/10 classes, objects
F 4/12 assignment 9 - part 2
14 M 4/15 classes, objects, discussion of final project
M/T 4/15-16 lab 10: OOP, final project exploration assignment 10 - part 1
W 4/17 algorithms
F 4/19 assignment 10 - part 2, final project - proposal
15 M 4/22 algorithms
M/T 4/22-23 lab 11: algorithms, final project meeting assignment 11 - part 1
W 4/24 CS research
F 4/26 assignment 11 - part 2, (optional) final project - functions
16 M 4/29 wrap-up
M/T 4/29-30 (optional) lab: work on final project
W 5/1 *** checkpoint 3 *** final project, 10pm (grad. seniors)
17 W 5/8 final project, 5pm (others)

Weekly Calendar