Course staff & office hours
Instructor: | Jesse Tov | jesse@eecs
| Ford 2-215 | Tu 3:30–5, Th 10–12, and gladly by appointment |
---|---|---|---|---|
Head TAs: | Curtis Wang | YearncheeWang2014@u
| Wilkinson* | M 11–1 |
Jason Brown | JasonBrown2016@u
| Wilkinson* | F 10–12 | |
Peer TAs: | Nathan Lindquist | NathanLindquist2018@u
| Wilkinson* | F 2–4 |
Kyu Oh | ChankyuOh2018@u
| Wilkinson* | Th 3–5 | |
Joe Severini | JosephSeverini2017@u
| Wilkinson* | M 1–3 | |
Ellie Tyger | ElizabethTyger2018@u
| Wilkinson* | Tu 10–12 | |
James Whang | SungyoonWhang2017@u
| Wilkinson* | W 4–6 | |
Lily Zhang | LilyZhang2018@u
| Wilkinson* | M 10–12 | |
ISP TAs: | Tushar Chandra | TusharChandra2018@u
| ISP House† | Su 11-1 |
Trent Cwiok | TrentCwiok2018@u
| ISP House† | Su 4–6 |
* Wilkinson Lab is Tech M338
† open to all—ISP House is at 616 Noyes
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 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.
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 TAs:
-
- Jason Brown
- Curtis Wang
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):
-
- Nathan Lindquist
- Kyu Oh
- Joe Severini
- Ellie Tyger
- James Whang
- Lily Zhang
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.
- ISP Tutors:
-
- Tushar Chandra
- Trent Cwiok
ISP tutors have the same rôle as peer tutors, but their sections will also integrate ISP topics.
Class
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.
Computing environment
We will use DrRacket
v6.4, 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
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.
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 the homework grade with the worst impact on your final grade from consideration for the final grade. Thus, if you choose to skip an assignment set 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.
Pair programming
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, you must switch roles.
Exams and quizzes
We will have two in-class exams to assess your progress:
- Thursday, April 28
- Thursday, May 26
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 both class and labs. It is our one concession to “high-school thinking.” (Consider it a crutch for your self-discipline.)
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. Each week’s homework grade is multiplied by that week’s lab quiz grade (0 or 1); students who fail a lab quiz have a week to come to office hours and convince an instructor or Head TA (not Peer TA) that they have learned the material, in order to receive homework credit. (Students who miss a lab quiz must email the instructor by the day of the lab to be eligible to make up the lab quiz.) The remaining 10% depends on the quizzes, lab participation, and the 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.
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 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 Sun, 10 Apr 2016 11:08:57 -0500.)
# | wk. of | Topic | M | Tu | W | Th | F | Notes, etc. |
---|---|---|---|---|---|---|---|---|
0 | Mar. 28 | Preliminaries | prologue | §1 | [slides] | |||
1 | Apr. 4 | Fixed-size data | §2 | §3 | §4 | §5 | §6 | [slides, 1] |
2 | Apr. 11 | Structs and itemizations | §9 | §10 | i1–2 | §11 | essay | [2 3 4 5] |
3 | Apr. 18 | Recursive unions | §12 | §13 | i2–3 | §16 | essay | [5 6 7] |
4 | Apr. 25 | Recursive unions | §17 | §18 | exam prep. | §19 | i3–4 | [8 9] |
5 | May 2 | Abstraction | §22 | §23 | §24 | §26 | i4–5 | [10 11 9] |
6 | May 9 | Mutual recursion | §29 | §30 | §31 | §32 | [12 13] | |
7 | May 16 | Generative recursion | §33 | i5–6 | §36 | §37 | §38 | [14 15] |
8 | May 23 | Accumulators | epilogue | exam prep. | exam prep. | essay | [15 16] | |
9 | May 30 | Conclusion |
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
Link | Assigned | Due |
Homework 0 | Thursday, March 31 | Tuesday, April 5 at 2:00 PM |
---|---|---|
Homework 1 | Tuesday, April 5 | Tuesday, April 12 at 11:59 PM |
Homework 2 | Tuesday, April 12 | Tuesday, April 19 at 11:59 PM |
Homework 3 | Tuesday, April 19 | Tuesday, April 26 at 11:59 PM |
Homework 4 | Tuesday, April 26 | Tuesday, May 3 at 11:59 PM |
Homework 5 | Tuesday, May 3 | Tuesday, May 10 at 11:59 PM |
Homework 6 | Tuesday, May 10 | Tuesday, May 17 at 11:59 PM |
Homework 7 | Thursday, May 17 | Tuesday, May 24 at 11:59 PM |
Homework 8 | Tuesday, May 24 | Tuesday, May 31 at 11:59 PM |
Homework 9 | Tuesday, May 24 | Tuesday, June 7 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.
Electronic hand-in
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. We will go over them in lab, but keep this page bookmarked as you will need to do this each week.
Installing the submission plugin
Download the plugin to your computer. Install the submission plugin by going to “File” > “Install Package...” inside DrRacket. Click “Browse...,” then click “File.” Navigate to the file you downloaded. Then click “Install.” When the “Install” button changes to “Update,” **do not click it**. Instead, exit DrRacket and restart it. If it installs correctly, you will have a EECS 111 Handin button in your DrRacket window.
Setting up your account
You MUST update your information before handing in assignments. To do this, got to File > Manage EECS111 Handin Account. Your username is your netID (three alphabetic letters followed by three numeric digits, e.g., “abc123”) and your old password is the last four digits of your seven-digit student ID. Type these values in, then click “Get Current Info.” Please fill in the “Full Name”, “Email,” and “TA” fields (where TA should have the first and last name of the TA of your section). You may update your password if you wish. Then, click “Change Info” to save.
Submitting homework
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
usernames (Netids)
joined by “+
”, as in
“abc123+xyz789
”.
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 grades
Log in to [TBD] using your handin server username and password. It will take you to a page listing all of the homeworks so far. For each homework, it shows whether you have handed in yet, a link to the latest submission once you’ve handed in, and your grade once we enter it.
Paper hand-in
When you turn in homework on paper, make sure to follow these instructions:
Use a cover page that lists the assignment number, your name(s), and which lab section you are in.
If you had collaborators, enumerate them, too. Not doing so imperils your grade.
+---------------------------------------+ | | | | | | | Assignment 0 | | Alyce H. Acker | | Bob Pue | | EECS 211 | | | | | +---------------------------------------+
- 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(s) on each page, just in case they get separated during grading.
Lab schedule
Day | Time | Place | Leader |
---|---|---|---|
Wed | 11 AM–noon | Tech LG62 | Chankyu |
Wed | 1–2 PM | Tech M120 | Joe |
Wed | 2–3 PM | Tech M349 | ISP |
Wed | 4–5 PM | Tech F279 | Ellie |
Thu | 11 AM–noon | Tech F279 | Lily |
Fri | 9–10 AM | Tech F280 | James |
Fri | noon–1 PM | Tech F279 | Jason |
Fri | 1–2 PM | Tech F279 | Nathan |
Fri | 2–3 PM | Tech F280 | ISP |
Textbooks
Required reading
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:
- the manuals in the Help Desk for the libraries in DrRacket,
- Quick: An Introduction to Racket with Pictures, and
- the Racket Guide.
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 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.
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.