Fundamentals of Computer Programming (EECS 111)

Winter 2011
Electrical Engineering and Computer Science Department
Northwestern University

Class Meets: 2:00PM-2:50PM MTuWF, Frances Searle 1-441 (MWF) and Frances Searle 2-107 (Tu)

Instructor: Doug Downey
Office Hours: 3:00-4:00PM Wednesday (or by appt), Ford 3-345
Email: ddowney <at> eecs <dot> northwestern <dot> edu

Teaching Assistant: Casey Klein
Office Hours: 1:00PM-2:00PM Mon., Ford 2-215
Email: clklein <at> eecs <dot> northwestern <dot> edu


Seven homework assignments make up 50 points of the grade, a larger project makes up 25 additional points, and an exam on Friday of week 8 of the course makes up the remaining 25 points. Grades are assigned using a fixed scale as follows: 93-100 points is an A, 90-93 points is an A-, 87-90 points is a B+, etc.


Will we have seven homework assignments, one each week. The turn-in procedure is given below. Note that LATE ASSIGNMENTS WILL NOT BE ACCEPTED. Thus, an imperfect assignment turned in on time is much better than a late assignment!

Note: In order to receive full credit, you should strive to not only write code that works, but also to write code that is simple and readable. Almost always, only small changes to the template (with helper functions) are required to complete the homework assignments, and you should aim to write code that is that simple. Especially in the case that your code has a bug, ensuring it is readable and follows the design recipe closely will maximize the partial credit you receive.

Problem Set 1(extended) Due 11:59PM Thursday, January 136 pts
Problem Set 2Due 11:59PM Friday, January 216 pts
Problem Set 3Due 11:59AM Friday, January 287 pts
Problem Set 4Due 11:59PM Thursday, February 37 pts
Problem Set 5Due 11:59PM Thursday, February 107 pts
Problem Set 6Due 11:59PM Thursday, February 1710 pts
Problem Set 7Due 11:59PM Wednesday, February 237 pts

How to turn in homework:

  1. Install the Handin tool by selecting "Install .plt File..." from DrRacket's File menu. When the installation dialog appears, select the "Web" tab (not the "File" tab) and enter the following URL:

    Click OK then wait until the installer progress window shows the line "setup-plt: done" before closing it. Restart DrRacket.

  2. Create an EECS 111 account by selecting "Manage EECS 111 Handin Account..." in DrRacket's File menu. Click the "New User" tab and fill out the form. You may choose any username you like, but be sure to enter your real name in full, since we need it to give you credit for your submission.
  3. Submit your work using the "EECS 111 Handin" button near DrRacket's "Run" button. Feel free to submit multiple times; we will grade only the one you submit last.

Final Project

The final project consists of two parts, the first being much larger (about 80% of the entire project). It's due electronically on March 18 (the finals day for the course).
Part 1Due 11:59PM Friday, March 1820 pts
Part 2Due 11:59PM Friday, March 185 pts


A key first step is to download and install DrRacket, the cross-platform development environment we'll be using in the course. You can download DrRacket here.


Week of January 3 HtDP 2nd Ed.: Prologue
Week of January 10 HtDP 2nd Ed.: Chapter 2
Week of January 17 HtDP 2nd Ed.: Chapter 4
Week of January 24 HtDP 1st Ed.: Chapter 14
SICP 1.1
SICP 1.2
Week of January 31 HtDP 1st Ed.: Chapter 17
HtDP 1st Ed.: Chapter 18
Week of February 7 HtDP 1st Ed.: Chapter 19
HtDP 1st Ed.: Chapter 20
Week of February 14 HtDP 1st Ed.: Chapter 15
HtDP 1st Ed.: Chapter 25
HtDP 1st Ed.: Chapter 26
Week of February 21 None
Week of February 28 HtDP 1st Ed.: Chapter 30
HtDP 1st Ed.: Chapter 31
Week of March 7 None

Lectures and Schedule (subject to change)

Week of January 3 M: Intro
Tu: No class
W: Basics of computation and functions
F: Design recipes
Week of January 10 M: Conditionals and Structures
Tu: Review
W: Structures and Templates in the Design Recipe
F: More on structures and Lists
Week of January 17 M: No class (MLK Day)
Tu: Review Structures and Lists
W: Continue struct/list review, plus sorting. Also: simple list syntax examples
F: Family trees
Week of January 24 M: Data abstraction (1)
Tu: Remove, append, review lists and trees
W: Binary Search Trees
F: Homework #3 review, Invariants
Week of January 31 M: two complex pieces of data
Tu: Cancelled (due to weather)
W: Cancelled (due to weather)
F: Review of Problem Set #4
Week of February 7 M: local
Tu: Practice Exam KEY, Review local, multiple complex args
W: abstraction
F: lambda
Week of February 14 M: mutually referential data definitions
Tu: Review lambda, abstraction, map, filter
W: generative recursion, binary search
F: quicksort
Week of February 21 M: Euclidean algorithm, graphs
Tu: Review for exam
W: Graphs
F: Exam
Week of February 28 M: more graphs
Tu: Exam Review
W: Accumulators
F: Accumulators and graphs
Week of March 7 M: Missionaries and Cannibals
Tu: No class
W: Queues and finding shortest paths
F: Autosnake!, also need graphs code