Syllabus
Week |
| Topic |
| ||
| ||
| ||
| ||
| ||
| ||
| ||
| ||
| ||
| ||
| ||
| ||
| ||
| ||
| ||
| ||
| ||
| ||
| ||
| ||
| ||
| Readings: 3.1, 3.4, 3.6, 4.6, 5.8, 6.1, 9, 11, 15, 16.6, 19.4, 20, 26, 32, 33.1 | |
| ||
| Readings: none | |
| ||
| Readings: none | |
| ||
| Readings: none |
The topics are linked to detailed weekly lecture plans below. The readings point into the on-line version of the text book.
You are primarily responsible for the readings. The lectures will help you understand those and will occasionally add highly pragmatic tips. But, the weekly homeworks and the exams will cover the reading material.
A semester tends to unfold in unpredictable ways, meaning the syllabus is subject to change. The most likely change concerns the last few weeks, which cover material that varies from semester to semester.
Details
Homeworks are due Tuesdays & Thursdays at 9pm. The first one is due Sept 7.
Day |
|
| ||||
01 |
| 09/04 |
| `hello world', Information vs. Data | ||
02 |
| 09/05 |
| Designing Functions |
| |
Lab 1 | ||||||
| ||||||
Day |
|
| ||||
03 |
| 09/09 |
| Designing Functions: Some Practice |
| |
04 |
| 09/11 |
| Designing Programs: the Basics | ||
05 |
| 09/12 |
| Desiging Programs: Some Practice |
| |
Lab 2 | ||||||
| ||||||
Day |
|
| ||||
06 |
| 09/16 |
| Representing Arbitrarily Large Data |
| |
07 |
| 09/18 |
| Designing Functions: Arbitrarily Large Data | ||
08 |
| 09/19 |
| Arbitrarily Large Data: Practice Design |
| |
Lab 3 | ||||||
| ||||||
Day |
|
| ||||
09 |
| 09/23 |
| Designing Functions via Composition |
| |
10 |
| 09/25 |
| Designing Programs: Arbitrarily Large Data | ||
11 |
| 09/26 |
| Local Definitions, Anonymous Functions |
| |
Lab 4 | ||||||
| ||||||
Day |
|
| ||||
12 |
| 09/30 |
| TBD | ||
13 |
| 10/02 |
| Practice with Anonymous Functions | ||
14 |
| 10/03 |
| Similar Functions |
| |
Lab 5 | ||||||
| ||||||
Day |
|
| ||||
15 |
| 10/07 |
| Designing (with) Abstractions | ||
16 |
| 10/09 |
| Designing (with) Abstractions: Practice | ||
17 |
| 10/10 |
| Designing Programs: Trees |
| |
Lab 6 | ||||||
| ||||||
Day |
|
| ||||
18 |
| 10/14 |
| Indigenous Peoples Day |
| |
19 |
| 10/16 |
| Designing Programs: Binary Search Trees | ||
20 |
| 10/17 |
| Designing Programs: Designing for Multiple Complex Arguments |
| 7b |
Lab 7 | ||||||
| ||||||
Day |
|
| ||||
Midterm coming up: 10/22 @ 6:00pm--9:00pm (in Dodge Hall 050) | ||||||
21 |
| 10/21 |
| Big-bang, Universe, and Client-Server Programs |
| 8a |
22 |
| 10/23 |
| Big-bang, Universe, and Client-Server Programs 2 | ||
23 |
| 10/24 |
| More Complex Client-Server Programs |
| 8b |
Lab 8 | ||||||
| ||||||
Day |
|
| ||||
24 |
| 10/28 |
| Graphs with Generative Recursion and Accumulators |
| 9a |
25 |
| 10/30 |
| More Generative Recursion | ||
26 |
| 10/31 |
| Graphs with Generative Recursion and Accumulators |
| 9b |
Lab 9 | ||||||
| ||||||
Day |
|
| ||||
27 |
| 11/04 |
| TBD | ||
28 |
| 11/06 |
| Designing Generative Recursive Functions | ||
29 |
| 11/07 |
| The Need For Accumulator Design |
| 10b |
Lab 10 | ||||||
| ||||||
Day |
|
| ||||
30 |
| 11/11 |
| Veterans Day |
| 11a |
31 |
| 11/13 |
| set-box! | ||
32 |
| 11/14 |
| Practice with set! / set-box! |
| 11b |
Lab 11 | ||||||
| ||||||
Day |
|
| ||||
Midterm coming up: 11/19 @ 6:00pm--9:00pm (in Dodge Hall 050) | ||||||
33 |
| 11/18 |
| Cyclic data and streams |
| 12a |
34 |
| 11/20 |
| Enforcing Signatures | ||
35 |
| 11/21 |
| AI & The End of Programming | ||
| ||||||
Day |
|
| ||||
36 |
| 11/25 |
| TBD | ||
37 |
| 11/27 |
| Thanksgiving | ||
38 |
| 11/38 |
| Thanksgiving Day | ||
Lab 13 | ||||||
| ||||||
Day |
|
| ||||
39 |
| 12/02 |
| Lambda Land |
| 14a |
40 |
| 12/04 |
| AMAA | ||
|
Computing Environment
We will use DrRacket (v8.10), a programming environment for a family of programming languages. For Fundamentals I, we will stick to the HtDP teaching languages plus a small number of teachpacks as specified in How to Design Programs (HtDP). DrRacket is freely available on the web, and we request that you install it on your own computer.
DrRacket runs on most popular platforms (Windows, Mac OS X, Linux, and other *nixes). Programs written in the teaching languages have mostly the same behavior on all platforms. You therefore do not need to worry what kind of machine you use when you run your programs.
Homeworks
The purpose of the homeworks is learn the material. You can only learn by doing. Secondarily, the homeworks will also prepare you for the exams.
There will be two weekly homeworks. Some problems are drawn from How to Design Programs (HtDP), the textbook; others are constructed for this instance of Fundamentals I. One of the homeworks will be done solo and be automatically graded (the one due Thursday), and will involve more routine practice of the material for the week. The other (due Tuesday) will be done with a partner, will be graded manually by the course staff, and will involve more design, creative work, and generally more challenging problems.
Homework should be submitted via Handins, analogous to the summer placement. (Note: it’s a different server during the summer vs during the semester!) Submit only a single file for each assignment, unless specified otherwise.
Late Policy
Falling behind on homework is never a good idea: the course presents new material every day, making catching up harder and harder.
However, we know that your time is not always easily scheduled, and some weeks, “stuff happens.” Therefore, you are allowed to turn in any homework up to 24 hours late with, provided you do not abuse this, no penalties. Concretely: you will be given up to 5 late days to use during the semester, up to one day on any individual homework. Once you've used up your late days, we will not accept any late submissions from you. If a homework is done with a partner, both partners must have late days remaining in order to submit late.
Pair Programming
You must work on the homework due Tuesday in assigned pairs. Your partner should be in the same lab as you; your first partner will be assigned in the first lab. Twice in the semester you will switch partners. You will submit one assignment per pair: since you request teams on Handins, there is no need for each partner to submit separately.
Pair programming means that you and your partner work on the homeworks 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 things that do not make sense. After a problem is solved to the satisfaction of both, you must switch roles.
Pair programming does not mean you split the assignment, and each do half. Not only is that an academic integrity violation, as you will be turning it work you did not work on, but you will not be learning. You should be here to learn.
Exams
on 10/22 at 6:00pm–9:00pm in Dodge Hall 050
on 11/19 at 6:00pm–9:00pm in Dodge Hall 050
These midterm exams will test material similar to that assigned in weekly homeworks. If you can solve every homework problem on your own, the exams will be easy. If not, you will have a difficult time.
All exams are open-book, meaning you can bring any printed or hand-written material you wish. Other than your laptop on which you’ll be doing the exam, no other electronic devices are allowed.
Grades
exam 1
25%
exam 2
30%
labs
~12%
(1% per lab)
homeworks
~33%
(roughly 1.65% per assignment)
Final grades will then be assigned on the following scale:
A | 93 - |
A- | 90 - 92 |
B+ | 87 - 89 |
B | 83 - 86 |
B- | 80 - 82 |
C+ | 77 - 79 |
C | 73 - 76 |
C- | 70 - 72 |
D+ | 67 - 69 |
D | 63 - 66 |
D- | 60 - 62 |
F | - 59 |