EECS 111: Fundamentals of
Computer Programming I

Syllabus – Spring 2016

Tech L361, TuTh, 2–3:20 PM

Course staff & office hours

Instructor: Jesse Tov jesse@eecs Ford 2-215 Tu 3:30–5, Th 10–12, and gladly by appointment
Head TAs: Curtis Wang YearncheeWang2014@u Wilkinson* M 11–1
Jason Brown JasonBrown2016@u Wilkinson* F 10–12
Peer TAs: Nathan Lindquist NathanLindquist2018@u Wilkinson* F 2–4
Kyu Oh ChankyuOh2018@u Wilkinson* Th 3–5
Joe Severini JosephSeverini2017@u Wilkinson* M 1–3
Ellie Tyger ElizabethTyger2018@u Wilkinson* Tu 10–12
James Whang SungyoonWhang2017@u Wilkinson* W 4–6
Lily Zhang LilyZhang2018@u Wilkinson* M 10–12
ISP TAs: Tushar Chandra TusharChandra2018@u ISP House Su 11-1
Trent Cwiok TrentCwiok2018@u ISP House Su 4–6

* Wilkinson Lab is Tech M338
open to all—ISP House is at 616 Noyes

General information & course policies

This course is an introduction to computing and programming. Its major goal is to introduce students to the principles of systematic problem solving through programming and the basic rules of computation.


The course assumes a basic familiarity with arithmetic and algebra. It demands curiosity, self-discipline, and some amount of people skills, because all computer scientists end up working with others interactively all the time, including in this course.

The course does not assume any prior programming experience. It is therefore suitable for first-year students—majors and non-majors alike—who wish to explore the intellectual ideas of the discipline.

Earning a grade

Many of you have one burning question on your mind as you start your college careers:

How am I going to get an A in this course?

We have some news for you: you are in college now, and in college, it really is about learning something and not (just) getting a grade. As a matter of fact, if you are taking a course and the A comes easy, you are either cheating yourself or you are allowing the instructor to cheat you.

Here is the positive take-away from this section: College is your last chance to learn how to learn by yourself, without pressure from parents, teachers, or peers. You want to learn that, because the quality of your life depends on it. Your life. Nothing more, nothing less.

Naturally, we understand that you want some feedback, both in terms of specific corrections and in terms of a grade. You want feedback so that you can improve your learning process. And we will give you that feedback. It is our end of the bargain. Your end is to demonstrate that you actually use the methods and tools for learning that work best in our experiemce. After all, you don’t want to waste your time, and we don’t want to waste ours either.


In a large introductory course such as EECS 111 you typically encounter three kinds of people, listed in increasing order of relevance to you:

  • Jesse Tov
Head TAs:
  • Jason Brown
  • Curtis Wang

TAs supervise the grading of homework sets, hold office hours, deal with failed quizzes and regrades, and occasionally substitute in lectures. In general, they are apprentice teachers and are here to learn how to run a course.

Peer TAs (a/k/a tutors):
  • Nathan Lindquist
  • Kyu Oh
  • Joe Severini
  • Ellie Tyger
  • James Whang
  • Lily Zhang

Tutors hold office hours and run labs, grade homeworks and provide feedback about the class’s progress. In general, they are undergraduate students who know that to learn something really well, you need to teach it.

ISP Tutors:
  • Tushar Chandra
  • Trent Cwiok

ISP tutors have the same rôle as peer tutors, but their sections will also integrate ISP topics.


Class consists of lectures and lab meetings.

Lectures meet on Tuesdays and Thursdays from 2:00 to 3:20 PM in Tech L361.

The course also has small lab sections which will be held at various times. You will sign up for one. The purpose of labs is to give you some hands-on experience with the actual tools, and to explain some of the principles from lecture with hands-on examples.

Computing environment

We will use DrRacket v6.4, a programming environment for the Racket programming language, some dialects of Java, Algol 60, OCaml, Scheme, and a few others. For EECS 111, we will stick to the HtDP teaching languages plus teachpacks. DrRacket is freely available on the Web at, and you should install it on your computer.

DrRacket runs on most popular platforms (Windows, Mac OS X, Linux, and other UNIX systems). Programs written in DrRacket work the same on all platforms. You therefore do not need to worry what kind of machine you use when you run DrRacket programs.


Most actual learning happens while completing homework, and the homework will help to prepare you for the exams

There will be weekly homework assignments. Some problems are drawn from HtDP, the textbook; others are constructed for this instance of EECS 111. We will grade some but not all problems from each set.

We will drop the homework grade with the worst impact on your final grade from consideration for the final grade. Thus, if you choose to skip an assignment set or if you just don’t get it one week, nothing is lost. The story is different for the second or third or…time.

You may only collaborate on problem sets with your assigned partner (see below). You must acknowledge your collaborator/partner on your cover page. Any other collaboration is cheating; we will report all cases to the university administration.

Pair programming

You must work on your homework (from HW2 onward) in pairs. Your lab TA will assign you a partner. Every few weeks, you will get a new partner.

Pair programming means that you and your partner work on the problem sets jointly. You read them together and you work on the solutions together. One of the lab’s purposes is to teach you how to work in pairs effectively; indeed, pairs are provably more effective than individuals in programming. The rough idea is this: One of you plays pilot, the other co-pilot. The pilot works on the keyboard and explains aloud what is going on; it is the co-pilot’s responsibility to question everything. After a problem is solved to the satisfaction of both, you must switch roles.

Exams and quizzes

We will have two in-class exams to assess your progress:

The exams will test material similar to that assigned in weekly homeworks. You will take the exams by yourself. Collaboration is not tolerated. If you can solve every homework problem on your own, the exams will be easy. If not, you will have a difficult time.

We will also have daily quizzes in both class and labs. It is our one concession to “high-school thinking.” (Consider it a crutch for your self-discipline.)


For the final grade, we will assign a weight of 30% to your overall homework grade and 30% to each of the two midterm exams. Each week’s homework grade is multiplied by that week’s lab quiz grade (0 or 1); students who fail a lab quiz have a week to come to office hours and convince an instructor or Head TA (not Peer TA) that they have learned the material, in order to receive homework credit. (Students who miss a lab quiz must email the instructor by the day of the lab to be eligible to make up the lab quiz.) The remaining 10% depends on the quizzes, lab participation, and the discretion of the instructor. Additionally, you cannot pass on exams alone—you must have a passing grade for your homeworks alone in order to pass this course.


This table specifies the reading and lecture schedule. The link in the first column connects this page to the homework that you will be working on for the corresponding week. The second column gives the date for Monday of each week. The third column lists the sections in How to Design Programs that cover the lecture material. The fourth through ninth columns give the pages or sections for your reading for that day.

This daily reading schedule is intentionally not tied to the lecture schedule. Instead it is designed to cover a reasonable amount of material on a regular basis. On the average, you will need to read six to twelve pages a day, which in our experience is an appropriate speed of reading. As a result you will occasionally be behind the lecture schedule, and most of the time you will be ahead, which will help you and us to make lectures interesting.

(Reading schedule last updated Sun, 10 Apr 2016 11:08:57 -0500.)

# wk. of Topic MTuWThFNotes, etc.
0 Mar. 28 Preliminaries prologue §1 [slides]
1 Apr. 4 Fixed-size data §2 §3 §4 §5 §6 [slides, 1]
2 Apr. 11 Structs and itemizations §9 §10 i1–2 §11 essay [2 3 4 5]
3 Apr. 18 Recursive unions §12 §13 i2–3 §16 essay [5 6 7]
4 Apr. 25 Recursive unions §17 §18 exam prep. §19 i3–4 [8 9]
5 May 2 Abstraction §22 §23 §24 §26 i4–5 [10 11 9]
6 May 9 Mutual recursion §29 §30 §31 §32 [12 13]
7 May 16 Generative recursion §33 i5–6 §36 §37 §38 [14 15]
8 May 23 Accumulators epilogue exam prep. exam prep. essay [15 16]
9 May 30 Conclusion

Homework is generally due at 11:59 PM on Tuesdays, though you should check each individual assignment to be sure. Please let the teaching staff know ASAP if you have trouble submitting, because turning in homework on time is your responsibility. Barring exceptional circumstances, late homework will not be accepted.


Link Assigned Due
Homework 0 Thursday, March 31 Tuesday, April 5 at 2:00 PM
Homework 1 Tuesday, April 5 Tuesday, April 12 at 11:59 PM
Homework 2 Tuesday, April 12 Tuesday, April 19 at 11:59 PM
Homework 3 Tuesday, April 19 Tuesday, April 26 at 11:59 PM
Homework 4 Tuesday, April 26 Tuesday, May 3 at 11:59 PM
Homework 5 Tuesday, May 3 Tuesday, May 10 at 11:59 PM
Homework 6 Tuesday, May 10 Tuesday, May 17 at 11:59 PM
Homework 7 Thursday, May 17 Tuesday, May 24 at 11:59 PM
Homework 8 Tuesday, May 24 Tuesday, May 31 at 11:59 PM
Homework 9 Tuesday, May 24 Tuesday, June 7 at 11:59 PM

Please submit your homework sets according to the instructions on the web page for the individual assignments, following the guidelines for turning in homework.

Electronic hand-in

For Homework 1 and subsequent assignments, we will be using online submission for the programming component of all assignments in this course. Instructions for using the homework server are below. We will go over them in lab, but keep this page bookmarked as you will need to do this each week.

Installing the submission plugin

Download the plugin to your computer. Install the submission plugin by going to “File” > “Install Package...” inside DrRacket. Click “Browse...,” then click “File.” Navigate to the file you downloaded. Then click “Install.” When the “Install” button changes to “Update,” **do not click it**. Instead, exit DrRacket and restart it. If it installs correctly, you will have a EECS 111 Handin button in your DrRacket window.

Setting up your account

You MUST update your information before handing in assignments. To do this, got to File > Manage EECS111 Handin Account. Your username is your netID (three alphabetic letters followed by three numeric digits, e.g., “abc123”) and your old password is the last four digits of your seven-digit student ID. Type these values in, then click “Get Current Info.” Please fill in the “Full Name”, “Email,” and “TA” fields (where TA should have the first and last name of the TA of your section). You may update your password if you wish. Then, click “Change Info” to save.

Submitting homework

To submit your homework, make sure it is open in DrRacket’s current Definitions window as well as saved to disk. Then click “EECS 111 Handin” to open the popup window. For pair submissions, enter both usernames (Netids) joined by “+”, as in “abc123+xyz789”. Enter either person’s password. Select the correct homework name. When you are ready, click “EECS 111 Handin” within the popup window. DrRacket will report whether your submission is successful at the top of the window. If it fails, READ the error message and correct your submission appropriately.

Checking grades

Log in to [TBD] using your handin server username and password. It will take you to a page listing all of the homeworks so far. For each homework, it shows whether you have handed in yet, a link to the latest submission once you’ve handed in, and your grade once we enter it.

Paper hand-in

When you turn in homework on paper, make sure to follow these instructions:

Lab schedule

Day Time Place Leader
Wed11 AM–noonTech LG62Chankyu
Wed1–2 PMTech M120Joe
Wed2–3 PMTech M349ISP
Wed4–5 PMTech F279Ellie
Thu11 AM–noonTech F279Lily
Fri9–10 AMTech F280James
Frinoon–1 PMTech F279Jason
Fri1–2 PMTech F279Nathan
Fri2–3 PMTech F280ISP


Required reading

Your daily readings come from:

Very much optional Racket readings

If you wish to learn to use Racket as a tool, which is not the goal of this course, then take a look at the following:


You cannot learn everything you need to know in lectures and/or homeworks. You must:

  1. Read the textbook (How to Design Programs, Second Edition).

    Try to stay ahead of the game and read material before it is covered in class. If you have questions, write them down. If these questions don’t get covered, ask in class and/or meet with the tutors, lab coordinator, or professor.

  2. Attempt to solve additional problems.

    Try to solve as many exercises as possible as you read sections in the book. If you can’t do them, read the material again.

  3. Attend the lecture and tutorials/labs.

    Every professor has a personal understanding of a course and teaches the material according to a personal style. It is important to get used to and to exploit this “personalization of courses”; otherwise, you’re wasting your money.

    The tutorials cover the practical know-how (how to edit, how to evaluate, how to print, etc.) and illustrate the material from a different angle.

  4. Talk to the course staff.

    If the lecture and the notes leave you with questions on the material, see your teacher(s) during office hours or make an appointment. Mark the passages in the book(s) that you haven’t understood and prepare questions that express what you haven’t understood.

  5. Keep up.

    Experience proves that students who fall behind quickly drop out. So, keep up with the readings, tutorials, and the homeworks. Ask for additional problems, if the homeworks failed to make a point.