Course staff & office hours
Instructor: | Jesse Tov | jesse@cs
| Mudd 3510 | TuTh 3:30–4:30 PM |
---|---|---|---|---|
Head TA: | Dan Feltey | daniel.feltey@eecs
| Mudd 3534 | W 2–4 PM |
Peer TAs: | Alexis Baudron | AlexisBaudron2020@u
| calendar | |
Aishwarya Jois | AishwaryaJois2021@u
| calendar | ||
Emmy Khawsam-ang | EmmyK2021@u
| calendar | ||
Jenny Lam | JennyLam2021@u
| calendar | ||
Mario Lizano | MarioLizano2020@u
| calendar | ||
Calypso McDonnell | CalypsoMcDonnell2021@u
| calendar | ||
Andy Moran | CarlosMoran2022@u
| calendar | ||
Paulina Tarasul | PaulinaTarasul2022@u
| calendar | ||
Owen Zhang | SizhengZhang2021@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 also demands curiosity, self-discipline, and some amount of people skills—because all computer scientists have to collaborate with others 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?
So listen up: This is 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. College is probably your final 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 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 TA:
-
- Dan Feltey
Head TAs supervise the grading of homework, 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 peer mentors):
-
- Aishwarya Jois
- Alexis Baudron
- Emmy Khawsam-ang
- Jenny Lam
- Mario Lizano
- Calypso McDonnell
- Andy Moran
- Paulina Tarasul
- Owen Zhang
Peer TAs hold office hours, 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 Lecture Room 3.
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.
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 your lowest non–final project homework score. In particular, from Homeworks 0 through 7, the homework grade with the worst impact on your final grade will not count. Thus, if you choose to skip one homework or if you just don’t get it one week, nothing is lost from your grade. The story is different for the second time, or third, or more.
You may only collaborate on problem sets with your assigned partner (see below). Any other collaboration is cheating; we will report all cases to the university administration.
Pair programming
You must work on your homework (from HW1 onward) in pairs. You will be assigned a partner for HW1 by the course staff, and 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 purpose of the labs 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, May 2
- Thursday, June 6
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 then the exams will not be difficult. If not, you will have a tough time.
We will also have daily in-class quizzes, which will help both you and me know whether you are keeping up with the material. Quizzes are pass/fail, and if you have a passing-grade–level understanding of what’s going on then the quizzes will be easy. If not, you will fail them.
You may fail or miss up to two quizzes for free before it begins to count against your grade, but it’s a good idea to make up any quiz you fail. When you fail a quiz, you have one week from when your grade is posted to make it up with the instructor or the head TA at office hours.
Unlike failed quizzes, missed quizzes may only be made up if you have permission from the instructor before missing the quiz.
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 a small amount of instructor discretion. Additionally, you cannot pass on exams alone—you must have a passing grade for the homework component in order to pass this course.
The final mapping of percentage scores to letter grades is not predetermined, and is at the discretion of the instructor.
Resources
Getting help
There are many ways to get help in EECS 111, depending on what you need and when:
Your first place to go for all-hours homework help is our Piazza discussion board. (If you want to post a non-trivial part of your solution, please mark your question private. If you aren’t sure you should mark it private and we can change it to public if appropriate.)
For in-person help, the instructor, head TA, and peer TAs all have scheduled office hours. See the top of this page and the course calendar. You may also make appointments with the instructor in addition to his scheduled office hours.
-
For personal or sensitive matters, please email the instructor at (@ 'jesse '(cs northwestern edu)).
Please do not use Canvas messaging to contact the instructor because he won’t to see your message.
If you what you need isn’t human assistance but a programming reference then you may want to see one of these library or language manuals:
- Library: 2htdp/image
- Library: 2htdp/universe
- Language: Beginning Student
- Language: Beginning Student with List Abbreviations
- Language: Intermediate Student
- Language:
Intermediate Student with
lambda
Required reading
Your daily readings come from:
- Felleisen, Findler, Flatt, Krishnamurthi, How to Design Programs, Second Edition. Available online or in print.
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:
- the manuals in the Help Desk for the libraries in DrRacket,
- Quick: An Introduction to Racket with Pictures, and
- the Racket Guide.
Computing environment
We will use DrRacket
v7.2, 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 use three HtDP
teaching languages: Beginning Student, Intermediate
Student Language, and Intermediate Student with
lambda
. 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.
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 next four columns link to sections in HtDP/2e, or occasionally outside essays, for your daily reading. The last column provides links to lecture notes and code from that week’s lectures.
This reading schedule is intentionally ahead of the lecture schedule, which will help us keep class meetings interesting. The schedule is designed to cover a reasonable amount of material at an average rate of 6–12 pages per day, four days per week.
HW | Week of | Topic | M | Tu | W | Th | Lecture notes |
---|---|---|---|---|---|---|---|
0 | Apr. 1 | Preliminaries | prologue | §1 | §4 | [0 1; 2] | |
1 | Apr. 8 | Fixed-size data | §5 | §6 | im1 | essay | [3; lab; 4] |
2 | Apr. 15 | Itemizations | §8 | §9 | §10 | im2 | [5; lab; 6] |
3 | Apr. 22 | Recursive unions | §11 | §14 | §15 | essay | [7; lab: A B; 8] |
4 | Apr. 29 | Recursive unions | §16 | §17 | [exam] | [9; lab; –] | |
5 | May 6 | Abstraction | §19 | §20 | §23 | im4 | [10; lab; 11] |
6 | May 13 | Mutual recursion | §25 | §26 | §27 | §29.1 | [12; lab; 12] |
7 | May 20 | Generative recursion | im5 | §31 | §32 | §33 | [13; lab; 13] |
8 | May 27 | Accumulators | epilogue | essay | [14; lab; 14] | ||
9 | June 3 | Conclusion | [exam] | [15] |
Homework
Homework is generally due at 11:59 PM every Tuesday, 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 documented injury or illness, late homework will not be accepted.
Link | Assigned | Due |
Homework 0 | Tuesday, April 2 | Tuesday, April 9 at 2:00 PM |
---|---|---|
Homework 1 | Tuesday, April 9 | Tuesday, April 16 at 11:59 PM |
Homework 2 | Tuesday, April 16 | Tuesday, April 23 at 11:59 PM |
Homework 3 | Tuesday, April 23 | Tuesday, April 30 at 11:59 PM |
Homework 4 | Tuesday, April 30 | Tuesday, May 7 at 11:59 PM |
Homework 5 | Tuesday, May 7 | Tuesday, May 14 at 11:59 PM |
Homework 6 | Tuesday, May 14 | Tuesday, May 21 at 11:59 PM |
Homework 7 | Tuesday, May 14 | Tuesday, May 28 at 11:59 PM |
Project Proposal | Tuesday, May 28 | Tuesday, June 4 at 11:59 PM |
Final Project | Tuesday, May 28 | Tuesday, June 11 at 11:59 PM |
Please submit your homework according to the instructions on the web page for the individual assignments, following the guidelines for turning in homework.
Except for HW0 you will submit your work through Canvas. Only one member in the group needs to submit the assignment. (Note that by the design of Canvas, only whoever submitted the assignment can re-upload newer versions.)
Lab schedules
Lab code
Lab # | Starter | Solution |
---|---|---|
1 | lab | solution |
2 | lab | solution |
3 | main lab, timers | main solution, timers solution |
4 | lab | solution |
5 | lab | solution |
6 | lab | solution |
7 | lab | solution |
8 | lab | solution |
Lab locations & leaders
Day | Time | Place | Leader |
---|---|---|---|
Wed | 11 AM | Tech F280 | Mario |
Wed | 12 PM | Tech F280 | Jenny & Aishwarya |
Wed | 1 PM | Tech F280 | Emmy |
Wed | 2 PM | Tech F280 | Andy |
Wed | 3 PM | Tech M166 | Paulina |
Wed | 5 PM | Tech F281 | Alexis |
Wed | 6 PM | Tech F281 | Owen |
Thu | 10 AM | Tech L158 | Calypso |
Advice
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 TAs 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.
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.
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.
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.