Spring 2021
Prof. Luke Hunsberger

Class Meetings Lab Meetings
Tue/Thu @ 1:30 - 2:45 p.m. via Zoom Wed @ 1:00 - 3:00 p.m. via Zoom

Note: All class meetings and labs will be held remotely via Zoom.

Contents and Frequented Links


People use computers to solve problems. To be effective, programmers must thoroughly understand not only the problem to be solved, but also the interesting relationship between the programmer, the program, and the computer. Investigating this relationship raises several unexpected, but important issues. For example, what sort of language do we want to use to "communicate" with a computer? What sorts of problems can computers be expected to solve? What are the basic elements of computation? What concepts or constructions can facilitate the task of programming a computer? This course addresses these and other important issues by having students directly interact with computers from the very beginning. The lectures involve the exploration of topics not only by discussing them, but also by regularly putting ideas to the test in live computer sessions. (The computer code seen during lecture is regularly posted on the course web site.) The course includes weekly lab sessions in which students get regular hands-on experience with the issues being addressed in the lectures. These lab sessions also serve as a kind of warm-up for the weekly programming assignments, in which students explore issues in greater depth.

The course covers the following topics:

These topics are addressed in the context of the Scheme programming language. Although these topics could be discussed in the context of any programming language, Scheme is a good choice because it has a comparatively simple computational model (i.e., syntax and semantics), yet is as powerful as any programming language.

To facilitate the writing and running of programs, this course employs the drScheme/drRacket software, which is installed on all of the lab computers and is freely available from

The textbook for this course is available online---for free.

Nuts and Bolts

Instructor Prof. Luke Hunsberger
Prof. Hunsberger's Office Hours See My Web Page
Text The textbook for this course will be provided online---for free. You may wish to print it out and put it into a loose-leaf binder. This would also be good for holding lab and assignment solutions if you want to print them out.
Lectures All lectures for this course will be held remotely via Zoom. All lectures will be recorded and posted on the course web page. The lectures will augment the material covered in the online textbook by providing in-depth examples and analyses through live computer programming sessions and frequent in-class problem solving. The material covered each week builds on what was covered in prior weeks. As such, it is essential that you keep up with the lectures and the associated reading assignments.
Coaches Our course will have three student "coaches". Each coach is someone who has taken CMPU-101 before (and done well) and likely has taken several other CS courses as well. Most coaches are CS majors, but not always. Coaches are an important part of this course. They are there to help you, and you are encouraged to take advantage of them. Coaches assist during the weekly lab sessions (described below). Coaches also hold regular office hours (see below).
Coaches' Office Hours Office Hours
Computer Accounts Since you are enrolled in a Computer Science course, you will receive your own CS department computer account which you can use for this or any future CS course at Vassar. Your CS department account is distinct from your Vassar email. Once you get your CS account, you will be able to log into any of our department computers (e.g., the computers in our lab spaces, SP 307 and SC 006). In addition, you will be able to log in remotely from your laptop. Don't worry about the details right now. You won't need your CS account the first week. More details will be provided during your first programming lab (during the 2nd week of classes).
Software The CS department computers in our lab spaces (SP 307 and SC 006) are set up for you to use the drRacket software. If you'd like to set up drRacket on your own computer, then go to to download the software.
Labs In addition to the regular lectures, this course has weekly lab sessions which will also be held remotely via Zoom. (Due to their nature, the lab sessions will not be recorded.) Typically, the Zoom session for each lab will include several "breakout" rooms, each hosted by a student "coach" and having around 7-9 students. When you have a question or are stuck on something during the lab, don't hesitate to ask the coach in your room for assistance. The professor will move from room to room to ensure that everything is working smoothly. If you are unable to attend a lab during the regular time (e.g., because you are in a different time zone), you must let the professor know in advance so that alternative arrangements can be made. You are encouraged to download drRacket onto your own computer so that you can do the lab while attending the lab via Zoom. Alternatively, you could remotely log in to your CS department account to access drRacket on our computers. (All will become clear well in advance!) Each lab session should be viewed as a warm-up to prepare you for that week's forthcoming assignment. Unless collaboration is explicitly allowed, you must do your own work on each lab; so asking one of your classmates for assistance is not permitted. If you get stuck, (virtually) raise your hand to ask for help. When you are finished a lab, simply ask the coach to verify that you have done the work and they will record your grade on a scale from 0 (no work) to 3 (well done).
Exams The will be two "in-class" exams for this course: one about halfway through, and one shortly before the end of classes. Because this course is being held remotely, you will be on the honor system for the exams. They will work as follows. First, to help you study for the exam, you will be required to create a single 8.5"-by-11" page of notes that you will be able to consult during the exam. You can put whatever you want on that page, but it must fit onto a single page with font no smaller than 8pt! For the record, you will email me your one page of notes *before* receiving the exam. Once you receive the exam, you may answer all the questions during the time allotted, and then email your finished exam back to me. You will not be able to use drRacket or any other software (other than a text editing program to write your solutions) during your exam. However, you will be allowed to consult your page of notes. So, choose wisely when deciding what to include on your page of notes!
No final exam for this course!
Assignments Starting the second or third week of classes there will typically be one assignment each week. Most assignments will be programming assignments. Unless explicitly authorized for a particular assignment, collaboration is NOT allowed on assignments. If you run into difficulty with an assignment, you should contact one of the student coaches during their office hours or Prof. Hunsberger during his office hours. However, there will typically be one or more problems on each assignment that will be "help free" (i.e., no assistance by coaches or Prof. Hunsberger until after the assignment has been turned in). All programming assignments will be submitted via email to me. More details will be provided in the near future about how to submit an assignment.
The final programming assignment will be a two-week project that will count the same as two ordinary assignments. It will be due towards the end of the study period.
Grades Based on Labs (15%), Assignments (45%), First Exam (20%), Second Exam (20%).
Note: Although higher numerical scores will necessarily receive the same or higher letter grades, I do not feel bound to follow the frequently used 90/80/70/60 cut-offs.
Academic Integrity Don't cheat! Read Going to the Source: A Guide to Academic Integrity and Attribution at Vassar College. The guidelines that apply to writing in general apply equally well to the writing of computer programs. Copying someone else's code without attribution amounts to plagiarism! School policy dictates that instructors must report all suspected incidents of cheating to their department chair. Did you read the preceding sentence?! Please don't put yourself or your professor in that position. In this course, unless explicitly stated otherwise, collaboration is not allowed on labs or assignments; and it is never allowed on exams.
Please read the CS Department's Integrity Guide for further information about how Academic Integrity and Attribution applies specifically to Computer Science courses at Vassar.
Academic Accommodations Academic accommodations are available for students registered with the Office for Accessibility and Educational Opportunity (AEO) . Students in need of disability (ADA/504) accommodations should schedule an appointment with me early in the semester to discuss any accommodations for this course that have been approved by the Office for Accessibility and Educational Opportunity, as indicated in your AEO accommodation letter.
Title 9 Note Vassar College statement on providing a safe learning environment.
Caution! This course starts out with basic concepts, but each week the online course notes, lectures, labs and assignments build new ideas on top of what was seen previously. Therefore, it is extremely important that you attend all lectures, keep up with the reading, and do all labs and assignments in a timely fashion. Historically, those students who experienced difficulty with CMPU-101 got into trouble by ignoring this advice. If you find yourself having trouble, by all means, come to my office hours! I'm more than happy to assist!


The following calendar of lecture topics will be filled out during the course of the semester. Typical calendar entries will also include links to the code we looked at in class that day, as well as information about labs and assignments.

Tue. Class
1:30 - 2:45 p.m.

Wed. Lab
1 - 3 p.m.

Thu. Class
1:30 - 2:45 p.m.

Feb. 17
Welcome and Introduction.
Chapters 1-3 in the Textbook.
Play Yahtzee online
Feb. 18
Chapters 2-6.
Feb. 23
Chapters 6 and 7: Default Rule for evaluating non-empty lists; the define and quote special forms.
Feb. 24
Chapters 7 (continued) and 8: The quote special form and predicates.
Feb. 25
Chapters 9 and 10: The lambda special form; the tester function; asmt-helper.txt
Code from class.
March 2
Chapter 11: The IF special form
Code from class
March 3
Instructions for today's lab. asmt-helper.txt; Solutions!
March 4
Continuing Chapter 11: The if and when special forms; plus a taste of recursion (Chapter 12).
Code from class
March 9
Continuing with Recursion (Chapter 12)
Code from class
March 10
Instructions for today's lab; Solutions!.
March 11
The cond special form (Chapter 13)
Code from class
March 16
Tail-recursion (Chapter 14)
Code from class
March 17
Instructions for today's lab; and Solutions!.
March 18
More fun with tail recursion and accumulators (Chapter 14); Code from class
Assignment 2 Solutions!
March 23
Defining predicates using only AND, OR and NOT (instead of IF and COND), the let special form (Chapter 15)
Code from class (with several versions of DIGIT-APPEARS?)
March 24
Instructions for today's lab; Solutions!; Code from beginning of lab;
March 25
Continuing with Chapter 15: let, let*, letrec; Code from class
No assignment this week; study for exam!
March 30
Exam One!
Covers Chapters 1-14
March 31
No lab today!
April 1
No class today!
April 6
The letrec special form (end of Chapter 15) and starting list-based recursion (beginning of Chapter 16)
Code from class
April 7
Instructions for today's lab; Solutions!.
April 8
Continuing with list-based recursion (Chapter 16)
Code from class
Asmt. 3 Solutions!
April 13
More list-based recursion: Code from class.
April 14
Lab for today; Solutions!.
April 15
Sorting Algorithms (Chapter 16.5).
Sorting algorithms
Asmt. 4 Solutions!
April 20
Chapter 17: Iteration using set and while.
Code from class
April 21
Lab; Solutions!.
April 22
More fun with iteration.
Code from class.
Asmt. 5 Solutions!
April 27
Chapter 18: Vectors.
Code from class
April 28
Lab for today; Solutions!.
April 29
Chapter 18 (continued)
Code from class
Asmt 6 Solutions!
May 4
Chapter 19: Data Structures!
Code from class
May 5
Lab for May 5 SOLUTIONS!
May 6
Using data structures to keep track of student grades in a course.
Code from class
May 11
Chapter 20: Model-View-Controller Paradigm
Code from class
May 12
Lab for today: SOLUTIONS!
May 13
Code from class
May 18
A graphical user interface (GUI) for yahtzee!
Code from class
May 19
Exam Two!
Will focus on Chapters 15-20.
May 20
Last CMPU-101-51 class!
Graphical Blackjack!
Graphical DICEY game
May 25
Study period begins
May 26
Study period continues
May 27
Study period ends!
Enjoy yourself!