CS 275: Programming Abstractions — Spring 2022

Instructor: Professor Stephen Checkoway stephen.checkoway@oberlin.edu
Lectures: Monday, Wednesday, Friday. 15:30–16:20 in King 337
Exam 1 Due: Monday, March 21 at 23:59
Exam 2 Due: Monday, May 2 at 23:59
Final Exam Due: Thursday, June 2 at 11:00
Office Hours: Tuesday, Friday. 13:30–14:30 in King 231

Course Description

This is a course on the principles behind programming languages. We will learn the language Scheme and use it to think about the features of programming languages and how they are implemented.


Your final course grades are based on three categories.

Class participation will be measured by answering iClicker poll questions so make sure you answer each one.


Homeworks should be done either individually, or in groups of two.

  1. Homework 1. Due Friday, Mar. 04 at 23:59
  2. Homework 2. Due Friday, Mar. 11 at 23:59
  3. Homework 3. Due Friday, Mar. 18 at 23:59
  4. Homework 4. Due Friday, Apr. 01 at 23:59
  5. Homework 5. Due Friday, Apr. 15 at 23:59
  6. Homework 6. Due Friday, Apr. 22 at 23:59
  7. Homework 7. Due Friday, May 06 at 23:59
  8. Homework 8. Due Wednesday, May 25 at 23:59

MiniScheme project

Several of the homeworks involve implementing an interpreter for a Scheme-like language. As with the other homeworks, these should be completed either individually or in groups of two. However, if you’re working with a partner on the interpreter, you should work with the same partner on all parts.

The details of the MiniScheme project can be found here.


There are three exams in the course, equally weighted. Each exam is a take-home exam. You’ll have 24 hours to complete the exam which will be due at the end of the course period/scheduled final exam time.

The final exam is optional. If you choose not to take the exam, then your final exam score will be the arithmetic mean (average) of your other two exam scores. Exams 1 and 2 are not optional, even if you take the final.

Course Materials

Required Texts

We’ll be using Racket Programming the Fun Way: From Strings to Turing Machines.

We’ll also use The Racket Guide and The Racket Reference as required.


Learning Goals

By the end of the course,

Course Policies


CS 151 is required. CS 241 is recommended. You should be comfortable with programming with higher level languages, such as Python or Java. No prior experience with Scheme or functional programming is expected.

COVID-19 Policy

This policy supersedes all of the other policies (except for any policies mandated by the College).

No one wants to be dealing with the pandemic at the same time as we try to do everything that’s required of us. We should all recognize just how hard this situation is for everyone. If you need any accommodation from me, just let me know. In particular, if you need additional time on any assignments or exams, just let me know, in advance, if at all possible.

You are never required to tell me about any health issues, including if you have COVID-19. You are welcome to talk to me about anything you’d like. I may not have answers to questions, but I can probably point you in right direction.

Attendance Policy

You are not required to attend; however, you receive points for participation in each class period that count toward your final grade. You can miss up to 3 days without penalty. Research indicates that students who attend class are more likely to be successful. You are strongly encouraged to attend every class. If you are unable to attend class, you should consider asking a classmate to take notes for you.

Missed or Late Work Policy

Homework is due by 23:59 on the day specified on each homework page. You have 3 late days that you can use throughout the semester. Each day that a homework is late decreases the number of late days you and your partner have left. If you run out of late days, homeworks turned in late will receive a score of 0. You are responsible for keeping track of your late days. There will be no exceptions to this policy without prior approval from Prof. Checkoway.

College policy prohibits accepting any work after the scheduled final exam time for a course without an incomplete.

Electronic Communication Policy

All electronic communication with course staff should take place on Piazza unless emails are specifically requested by the staff. Course staff may, from time to time, respond to emails, but a response to one email does not guarantee a response to a second. Use Piazza!

Collaboration Policy

You are allowed, and encouraged, to work in groups of size two on all homeworks. You are free to have different groups for different assignments with the exception of the MiniScheme interpreter which should be completed with the same partner (or individually). You are allowed to talk to anyone in the course about the assignments; however, you are not allowed to share solutions with anyone outside your group. Doing so is academic misconduct.

Academic Integrity Policy

You must adhere to the Oberlin College Academic Integrity Policy. Please familiarize yourself with the Honor Code.

Religious Holiday Observance Policy

Students wishing to be excused from class in order to observe religious holidays must follow the Oberlin College Religious Holiday Observance Policy.