EECS 111: Fundamentals of
Computer Programming I

Syllabus – Spring 2019

Tech Lecture Room 3, TuTh, 2–3:20 PM

Course staff & office hours

Instructor: Jesse Tov jesse@cs Mudd 3510 TuTh 3:30–4:30 PM
Head TA: Dan Feltey daniel.feltey@eecs Mudd 3534 W 2–4 PM
Peer TAs: Alexis Baudron AlexisBaudron2020@u calendar
Aishwarya Jois AishwaryaJois2021@u calendar
Emmy Khawsam-ang EmmyK2021@u calendar
Jenny Lam JennyLam2021@u calendar
Mario Lizano MarioLizano2020@u calendar
Calypso McDonnell CalypsoMcDonnell2021@u calendar
Andy Moran CarlosMoran2022@u calendar
Paulina Tarasul PaulinaTarasul2022@u calendar
Owen Zhang SizhengZhang2021@u calendar

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.

Prerequisites

The course assumes a basic familiarity with arithmetic and algebra. It also demands curiosity, self-discipline, and some amount of people skills—because all computer scientists have to collaborate with others 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?

So listen up: This is 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. College is probably your final 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 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.

People

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

Instructor:
  • Jesse Tov
Head TA:
  • Dan Feltey

Head TAs supervise the grading of homework, 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 peer mentors):
  • Aishwarya Jois
  • Alexis Baudron
  • Emmy Khawsam-ang
  • Jenny Lam
  • Mario Lizano
  • Calypso McDonnell
  • Andy Moran
  • Paulina Tarasul
  • Owen Zhang

Peer TAs hold office hours, 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.

Class

Class consists of lectures and lab meetings.

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

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.

Homework

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 your lowest non–final project homework score. In particular, from Homeworks 0 through 7, the homework grade with the worst impact on your final grade will not count. Thus, if you choose to skip one homework or if you just don’t get it one week, nothing is lost from your grade. The story is different for the second time, or third, or more.

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

Pair programming

You must work on your homework (from HW1 onward) in pairs. You will be assigned a partner for HW1 by the course staff, and 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 purpose of the labs 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, or after a fixed period of time, 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 then the exams will not be difficult. If not, you will have a tough time.

We will also have daily in-class quizzes, which will help both you and me know whether you are keeping up with the material. Quizzes are pass/fail, and if you have a passing-grade–level understanding of what’s going on then the quizzes will be easy. If not, you will fail them.

You may fail or miss up to two quizzes for free before it begins to count against your grade, but it’s a good idea to make up any quiz you fail. When you fail a quiz, you have one week from when your grade is posted to make it up with the instructor or the head TA at office hours.

Unlike failed quizzes, missed quizzes may only be made up if you have permission from the instructor before missing the quiz.

Grades

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. The remaining 10% depends on the daily quizzes and a small amount of instructor discretion. Additionally, you cannot pass on exams alone—you must have a passing grade for the homework component in order to pass this course.

The final mapping of percentage scores to letter grades is not predetermined, and is at the discretion of the instructor.

Resources

Getting help

There are many ways to get help in EECS 111, depending on what you need and when:

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:

Computing environment

We will use DrRacket v7.2, 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 use three HtDP teaching languages: Beginning Student, Intermediate Student Language, and Intermediate Student with lambda. DrRacket is freely available on the Web at https://download.racket-lang.org/, 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.

Schedule

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 next four columns link to sections in HtDP/2e, or occasionally outside essays, for your daily reading. The last column provides links to lecture notes and code from that week’s lectures.

This reading schedule is intentionally ahead of the lecture schedule, which will help us keep class meetings interesting. The schedule is designed to cover a reasonable amount of material at an average rate of 6–12 pages per day, four days per week.

HW Week of Topic MTuWTh Lecture notes
0 Apr. 1 Preliminaries prologue §1 §4 [0 1; 2]
1 Apr. 8 Fixed-size data §5 §6 im1 essay [3; lab; 4]
2 Apr. 15 Itemizations §8 §9 §10 im2 [5; lab; 6]
3 Apr. 22 Recursive unions §11 §14 §15 essay [7; lab: A B; 8]
4 Apr. 29 Recursive unions §16 §17 [exam] [9; lab; –]
5 May 6 Abstraction §19 §20 §23 im4 [10; lab; 11]
6 May 13 Mutual recursion §25 §26 §27 §29.1 [12; lab; 12]
7 May 20 Generative recursion im5 §31 §32 §33 [13; lab; 13]
8 May 27 Accumulators epilogue essay [14; lab; 14]
9 June 3 Conclusion [exam] [15]

Homework

Homework is generally due at 11:59 PM every Tuesday, 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 documented injury or illness, late homework will not be accepted.

Link Assigned Due
Homework 0 Tuesday, April 2 Tuesday, April 9 at 2:00 PM
Homework 1 Tuesday, April 9 Tuesday, April 16 at 11:59 PM
Homework 2 Tuesday, April 16 Tuesday, April 23 at 11:59 PM
Homework 3 Tuesday, April 23 Tuesday, April 30 at 11:59 PM
Homework 4 Tuesday, April 30 Tuesday, May 7 at 11:59 PM
Homework 5 Tuesday, May 7 Tuesday, May 14 at 11:59 PM
Homework 6 Tuesday, May 14 Tuesday, May 21 at 11:59 PM
Homework 7 Tuesday, May 14 Tuesday, May 28 at 11:59 PM
Project Proposal Tuesday, May 28 Tuesday, June 4 at 11:59 PM
Final Project Tuesday, May 28 Tuesday, June 11 at 11:59 PM

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

Except for HW0 you will submit your work through Canvas. Only one member in the group needs to submit the assignment. (Note that by the design of Canvas, only whoever submitted the assignment can re-upload newer versions.)

Lab schedules

Lab code

Lab # Starter Solution
1 lab solution
2 lab solution
3 main lab, timers main solution, timers solution
4 lab solution
5 lab solution
6 lab solution
7 lab solution
8 lab solution

Lab locations & leaders

Day Time Place Leader
Wed11 AMTech F280Mario
Wed12 PMTech F280Jenny & Aishwarya
Wed1 PMTech F280Emmy
Wed2 PMTech F280Andy
Wed3 PMTech M166Paulina
Wed5 PMTech F281Alexis
Wed6 PMTech F281Owen
Thu10 AMTech L158Calypso

Advice

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 TAs 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.

    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.

  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.