EECS 111: Fundamentals of
Computer Programming I

Syllabus – Spring 2017

Tech L361, TuTh, 2–3:20 PM

Course staff & office hours

Instructor: Jesse Tov jesse@eecs Ford 2-215 Tue. and Thu. by appointment
Head TAs: Curtis Wang ycwang@u Tech M355 Tue. 3pm-5pm
Shu-Hung You shu-hung.you@eecs Ford 2-210 /
2F Kitchen
Mon. 4pm-6pm
Peer TAs: Jonathan Chan JonathanChan2020@u calendar
Darren Hwang DarrenHwang2019@u calendar
Aaron Kaneti AaronKaneti2020@u calendar
Nathan Lindquist NathanLindquist2018@u calendar
Sena Oktem sena@u calendar
Sebastian Pretzer pretzer@u calendar
Scott Renshaw ScottRenshaw2018@u calendar
Lauren Ru LaurenRu2018@u calendar
Renee Zha ReneeZha2019@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 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.

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 TAs:
  • Curtis Wang
  • Shu-Hung You

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):
  • Jonathan Chan
  • Darren Hwang
  • Aaron Kaneti
  • Nathan Lindquist
  • Sena Oktem
  • Sebastian Pretzer
  • Scott Renshaw
  • Lauren Ru
  • Renee Zha

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.

Class

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.8, 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 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.

Piazza

We have a Piazza discussion board where you can ask questions. Your questions (and answers) must not reveal information regarding solutions.

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 the homework grade with the worst impact on your final grade from consideration for the final grade. Thus, if you choose to skip homework 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, 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, the exams will be easy. If not, you will have a difficult time.

We will also have daily quizzes in class. It is our one concession to “high-school thinking.” (Consider it a crutch for your self-discipline.) Quizzes are pass/fail, and if you fail a quiz, you have a week to make it up at instructor or head TA office hours. Missed quizzes may not be made up without prior permission from the instructor.

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

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 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 Mon, 27 Mar 2017 09:52:16 -0500.)

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

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.

Homework

Link Assigned Due
Homework 0 Tuesday, March 28 Tuesday, April 4 at 2:00 PM
Homework 1 Tuesday, April 4 Tuesday, April 11 at 11:59 PM
Homework 2 Tuesday, April 11 Tuesday, April 18 at 11:59 PM
Homework 3 Tuesday, April 18 Tuesday, April 25 at 11:59 PM
Homework 4 Tuesday, April 25 Tuesday, May 2 at 11:59 PM
Homework 5 Tuesday, May 2 Tuesday, May 9 at 11:59 PM
Homework 6 Tuesday, May 9 Tuesday, May 16 at 11:59 PM
Homework 7 Tuesday, May 9 Tuesday, May 23 at 11:59 PM
Project Proposal Tuesday, May 23 Tuesday, May 30 at 11:59 PM
Final Project Tuesday, May 23 Tuesday, June 6 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.

Installing the submission plugin

Once DrRacket is installed, you will need to set up DrRacket to connect with the class grading server. The client for the class grading server is provided as a package for DrRacket, which you can install by going to “File” > “Install Package.” Then, for the Package Source, use: http://users.eecs.northwestern.edu/~ycw244/handin-client.zip . Click “Install” and wait for the installation to finish, at which point you can then click “close.” Restart DrRacket by closing DrRacket completely (if Mac, select “DrRacket” > “Quit”; if Windows or Linux, select “File” > “Exit”) and then relaunching DrRacket. If the installation was successful, you will see a new button in the top right corner of DrRacket with the Northwestern icon and “EECS 111 2017 SQ Handin.”

Setting up your account

To create your grading server account, go to “File” > “Manage EECS 111 SQ Handin Account.” Click the “New User” tab. Your username and password can be whatever you'd like them to be. Make sure you fill in your NetID in the NetID field, which is three letters followed by three or four numbers (abc123 or abc1234). If you do not enter your NetID correctly, your assignment grade will not be recorded on Canvas and you will not get credit for it, so make absolutely certain to enter your correct NetID in the NetID field.

When you have filled in all of the fields, click “Add User.” You should now be ready to submit homework assignments, which can be done by clicking “EECS 111 2017 SQ Handin.”

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 joined by “+”, as in “abc123+xyz7890”. 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 your submission

To look at submissions (to make sure you have a file submitted) and your grades before they are synced to Canvas, you can go to: https://thinair.eecs.northwestern.edu:7979/. Your browser will likely complain about this site being “unsafe.” You will need to “add an exception” in your browser, because the security certificate is self-signed by course staff. Then you can login with your username and password that you used for handin.

Paper hand-in

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

Lab schedule

Day Time Place Leader
Wed9 AMTech M120Nathan
Wed10 AMTech F280Sena
Wed11 AMTech F280Scott
Wed12 PMTech F280Darren & Jonathan
Wed2 PMTech M166Renee
Wed4 PMTech F280Aaron & Seb
Wed5 PMTech F280Lauren

Textbooks

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:

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