Course staff & office hours
|Instructor:||Jesse Tov||Ford 2-215||Tue. and Thu. by appointment|
|Head TAs:||Curtis Wang||Tech M355||Tue. 3pm-5pm|
|Shu-Hung You||Ford 2-210 /|
|Peer TAs:||Jonathan Chan||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.
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:
- 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 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.
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
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.
We have a Piazza discussion board where you can ask questions. Your questions (and answers) must not reveal information regarding solutions.
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.
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:
- Thursday, April 27
- Thursday, June 1
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.
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.
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||M||Tu||W||Th||F||Notes, 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|||
|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. ||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 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.
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:
“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.”
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
joined by “
+”, as in
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.
When you turn in homework on paper, make sure to follow these instructions:
- Please use a cover page that lists the assignment number, your name, and your NetID.
- Staple the pages on the upper left, parallel to the left margin. Do so before you hand them in. N.B.: instructors, teaching assistants (TAs), and tutors don’t own staplers. If they do, they are out of staples. If they aren’t, their staplers will accidentally shred your homework. So: don’t ask :-).
- Please do not turn in partial pages or pages with a messy fringe from a spiral notebook. Your pages should stack neatly with everyone else’s.
- Put your name on each page, just in case they get separated during grading.
|Wed||9 AM||Tech M120||Nathan|
|Wed||10 AM||Tech F280||Sena|
|Wed||11 AM||Tech F280||Scott|
|Wed||12 PM||Tech F280||Darren & Jonathan|
|Wed||2 PM||Tech M166||Renee|
|Wed||4 PM||Tech F280||Aaron & Seb|
|Wed||5 PM||Tech F280||Lauren|
Your daily readings come from:
- Felleisen, Findler, Flatt, Krishnamurthi, How to Design Programs, Second Edition.
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:
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.
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.
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.
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.
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.