Fundamentals of Computer Programming (EECS 111)

Winter 2013
Electrical Engineering and Computer Science Department
Northwestern University

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

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

Teaching Assistants: Yuankai Chen, Xiangyu Li
Office Hours: 4:00-5:00PM Wednesday, Wilkinson Lab; 2:00-3:00PM Thursday, Wilkinson Lab
Email: YuankaiChen2014 <at> u <dot> northwestern <dot> edu, XiangyuLi <at> u <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 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 Monday, January 146 pts
Problem Set 2Due 11:59PM Tuesday, January 228 pts
Problem Set 3Due 11:59PM Monday, January 287 pts
Problem Set 4Due 11:59PM Friday, February 17 pts
Problem Set 5Due 11:59PM Tuesday, February 127 pts
Problem Set 6Due 11:59PM Tuesday, March 58 pts
Problem Set 7Due 11:59PM Friday, March 227 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 22.
ProjectDue 11:59PM Friday, March 2225 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 7 HtDP 2nd Ed.: Prologue
HtDP 2nd Ed.: Chapter 2
Week of January 14 HtDP 2nd Ed.: Chapter 2
Week of January 21 HtDP 2nd Ed.: Chapter 4
HtDP 1st Ed.: Chapter 14
Week of January 28 (the below is optional. Problem Set 4 utilizes HtDP Ch. 14, above)
SICP 1.1
SICP 1.2
Week of February 4 HtDP 1st Ed.: Chapter 17
HtDP 1st Ed.: Chapter 18
HtDP 1st Ed.: Chapter 19
Week of February 18 HtDP 1st Ed.: Chapter 20
HtDP 1st Ed.: Chapter 21
HtDP 1st Ed.: Chapter 15
HtDP 1st Ed.: Chapter 25
HtDP 1st Ed.: Chapter 26
Week of February 25 None
Week of March 4 HtDP 1st Ed.: Chapter 30
HtDP 1st Ed.: Chapter 31

Lectures and Schedule (subject to change)

Week of January 7 M: Intro
W: Basics of computation and functions
F: Design recipes
Week of January 14 M: Conditionals and Structures
Tu: Review
W: Structures and Templates in the Design Recipe
F: More on structures and Lists
Week of January 21 M: No class (MLK Day)
Tu: Review Structures and Lists
W: Continue struct/list review, plus sorting.
F: Family trees
Week of January 28 M: Data abstraction
Tu: Review lists and trees
W: Binary Search Trees and Invariants
F: Invariants (cont.) and syntax/semantics
Week of February 4 M: two complex pieces of data
Tu: Review BSTs, invariants, two complex pieces of data
W: local
F: map
Week of February 11 M: more on abstraction, foldr, lambda
Tu: Review
W: Review homework and practice exam   KEY
F: Mid-term exam
Week of February 18 M: mutually referential data definitions
Tu: No review
W: generative recursion (intro)
F: generative recursion (cont)
Week of February 25 M: binary search
Tu: Review mutual/generative recursion
W: quicksort
F: GCDs and graphs
Week of March 4 M: More graphs
Tu: No review
W: More graphs, Accumulators
F: More Accumulators, graphs
Week of March 11 M: No class
Tu: Shortest paths
W: Missionaries and Cannibals
F: Tail recursion, Autosnake also need graphs code