Fundamentals of Computer Programming (EECS 111)

Winter 2012
Electrical Engineering and Computer Science Department
Northwestern University

Class Meets: 2:00PM-2:50PM MTuWF, Tech L211

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

Teaching Assistants: Tim Rambo, Besim Avci
Office Hours: 4:00-5:00PM Wednesday, M350; 2:00-3:00PM Thursday, L580
Email: TimothyRambo2017 <at> u <dot> northwestern <dot> edu, besim <dot> namik <dot> avci <at> gmail <dot> com


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 6 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 1Due 11:59PM Thursday January 126 pts
Problem Set 2Due 11:59PM Thursday, January 196 pts
Problem Set 3Due 11:59PM Thursday, January 267 pts
Problem Set 4Due 11:59PM Thursday, February 29 pts
Problem Set 5Due 11:59PM Wednesday, February 85 pts
Problem Set 6Due 11:59PM Thursday, February 2311 pts
Problem Set 7Due 11:59PM Friday, March 166 pts

How to turn in homework:

You will turn in homework using Blackboard. Please upload a single .rkt file containing your answers to the exercises.

Final Project

The final project is due via Blackboard on March 16 (the finals day for the course).
ProjectDue 11:59PM Friday, March 1825 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 2 HtDP 2nd Ed.: Prologue
Week of January 9 HtDP 2nd Ed.: Chapter 2
Week of January 16 HtDP 2nd Ed.: Chapter 4
Week of January 23 HtDP 1st Ed.: Chapter 14
SICP 1.1
SICP 1.2
Week of January 30 HtDP 1st Ed.: Chapter 17
HtDP 1st Ed.: Chapter 18
Week of February 6 HtDP 1st Ed.: Chapter 19
HtDP 1st Ed.: Chapter 20
HtDP 1st Ed.: Chapter 21
Week of February 13 HtDP 1st Ed.: Chapter 15
HtDP 1st Ed.: Chapter 25
HtDP 1st Ed.: Chapter 26
Week of February 20 None
Week of February 27 HtDP 1st Ed.: Chapter 30
HtDP 1st Ed.: Chapter 31
Week of March 5 None

Lectures and Schedule (subject to change)

Week of January 2 Tu: Intro
W: Basics of computation and functions
F: Design recipes
Week of January 9 M: Conditionals and Structures
Tu: Review
W: Structures and Templates in the Design Recipe
F: More on structures and Lists
Week of January 16 M: No class (MLK Day)
Tu: Review Structures and Lists
W: Continue struct/list review, plus sorting.
F: Family trees
Week of January 23 M: Remove, append, and Data abstraction (1)
Tu: Review lists and trees
W: Binary Search Trees
F: Invariants
Week of January 30 M: two complex pieces of data
Tu: Review BSTs, invariants, two complex pieces of data
W: local
F: map
Week of February 6 M: more on abstraction, filter, foldr
Tu: Review practice exam KEY
W: lambda
F: Mid-term exam
Week of February 13 M: mutually referential data definitions
Tu: No review
W: generative recursion
F: binary search
Week of February 20 M: quicksort
Tu: Review lambda, mutual recursion
W: graphs
F: more graphs
Week of February 27 M: More graphs and Accumulators
Tu: No review
W: Accumulators and Tail Recursion
F: Accumulators and graphs
Week of March 5 M: Missionaries and Cannibals
W: Shortest paths
F: Autosnake also need graphs code