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/06 |
| `hello world', Information vs. Data | ||
02 |
| 09/07 |
| Designing Functions |
| |
Lab 1 | ||||||
| ||||||
Day |
|
| ||||
03 |
| 09/11 |
| Designing Functions: Some Practice |
| |
04 |
| 09/13 |
| Designing Programs: the Basics | ||
05 |
| 09/14 |
| Desiging Programs: Some Practice |
| |
Lab 2 | ||||||
| ||||||
Day |
|
| ||||
06 |
| 09/18 |
| Representing Arbitrarily Large Data |
| |
07 |
| 09/20 |
| Designing Functions: Arbitrarily Large Data | ||
08 |
| 09/21 |
| Arbitrarily Large Data: Practice Design |
| |
Lab 3 | ||||||
| ||||||
Day |
|
| ||||
09 |
| 09/25 |
| Designing Functions via Composition |
| |
10 |
| 09/27 |
| Designing Programs: Arbitrarily Large Data | ||
11 |
| 09/28 |
| Local Definitions, Anonymous Functions |
| |
Lab 4 | ||||||
| ||||||
Day |
|
| ||||
Midterm coming up: 10/02 @ 10:30-11:35am | ||||||
12 |
| 10/02 |
| Exam 0 | ||
13 |
| 10/04 |
| Practice with Anonymous Functions | ||
14 |
| 10/05 |
| Similar Functions |
| |
Lab 5 | ||||||
| ||||||
Day |
|
| ||||
15 |
| 10/09 |
| Indigenous Peoples Day | ||
16 |
| 10/11 |
| Designing (with) Abstractions | ||
17 |
| 10/12 |
| Designing (with) Abstractions: Practice |
| |
Lab 6 | ||||||
| ||||||
Day |
|
| ||||
18 |
| 10/16 |
| Designing Programs: Trees |
| |
19 |
| 10/18 |
| Designing Programs: Binary Search Trees | ||
20 |
| 10/19 |
| Designing Programs: Designing for Multiple Complex Arguments |
| |
Lab 7 | ||||||
| ||||||
Day |
|
| ||||
21 |
| 10/23 |
| Big-bang, Universe, and Client-Server Programs |
| |
22 |
| 10/25 |
| Big-bang, Universe, and Client-Server Programs 2 | ||
23 |
| 10/26 |
| More Complex Client-Server Programs |
| |
Lab 8 | ||||||
| ||||||
Day |
|
| ||||
24 |
| 10/30 |
| Graphs with Generative Recursion and Accumulators |
| |
25 |
| 11/01 |
| More Generative Recursion | ||
26 |
| 11/02 |
| Graphs with Generative Recursion and Accumulators |
| |
Lab 9 | ||||||
| ||||||
Day |
|
| ||||
Midterm coming up: 11/06 @ 10:30-11:35am | ||||||
27 |
| 11/06 |
| Exam 1 | ||
28 |
| 11/08 |
| Designing Generative Recursive Functions | ||
29 |
| 11/09 |
| The Need For Accumulator Design |
| |
Lab 10 | ||||||
| ||||||
Day |
|
| ||||
30 |
| 11/13 |
| set! |
| |
31 |
| 11/15 |
| set-box! | ||
32 |
| 11/16 |
| Practice with set! / set-box! |
| |
Lab 11 | ||||||
| ||||||
Day |
|
| ||||
33 |
| 11/20 |
| Cyclic data and streams |
| |
34 |
| 11/22 |
| Thanksgiving | ||
35 |
| 11/23 |
| Thanksgiving Day | ||
| ||||||
Day |
|
| ||||
Midterm coming up: 11/27 @ 10:30-11:35am | ||||||
36 |
| 11/27 |
| Exam 2 | ||
37 |
| 11/29 |
| Enforcing Signatures | ||
38 |
| 11/30 |
| AI & The End of Programming | ||
Lab 13 | ||||||
| ||||||
Day |
|
| ||||
39 |
| 12/04 |
| Lambda Land |
| |
40 |
| 12/06 |
| 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 Gradescope, just like the summer placement. 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. If you do abuse this (turning in many/most homeworks late), we may impose a penalty, so treat the deadline with respect. Beyond that 24 hour period (e.g., 24 hrs and 1 second), no late work will be accepted, so don’t try to sneak up on it.
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: when you submit, you will add the second person so that both get credit, but do not 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/02 at 10:30-11:35am
on 11/06 at 10:30-11:35am
on 11/27 at 10:30-11:35am
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. The exams will be done on paper, and no electronic devices will be allowed (including phones, smart watches, etc).
Grades
exam 0
18%
exam 1
18%
exam 2
19%
labs
12%
(1% per lab)
homeworks
33%
(1.65% per assignment)
NOTE: The material and exams are largely cumulative, and as a result, better performance on later exams can improve earlier scores. Higher scores on subsequent exams will not replace earlier scores, but if the average of an exam and later exams is higher, we will take that score instead. Rather than describe this in further detail (in imprecise English), here is code that shows how your final exam grades will be calculated once you have taken all three exams (this obviously won’t be reflected until end of semester, but you can do these calculations on your own at any time):
(: exam0-final (Number Number Number -> Number)) ;; the max of: original exam0 score, average of exam0 & exam 1, average of all 3 (check-expect (exam0-final 95 90 90) 95) (check-expect (exam0-final 80 100 85) 90) (check-expect (exam0-final 80 90 100) 90) (define (exam0-final exam0-raw exam1-raw exam2-raw) (max exam0-raw (/ (+ exam0-raw exam1-raw) 2) (/ (+ exam0-raw exam1-raw exam2-raw) 3))) (: exam1-final (Number Number Number -> Number)) ;; the max of: original exam1 score, average of exam1 & exam 2 (check-expect (exam1-final 100 80 75) 80) (check-expect (exam1-final 90 80 90) 85) (check-expect (exam1-final 70 80 90) 85) (define (exam1-final exam0-raw exam1-raw exam2-raw) (max exam1-raw (/ (+ exam1-raw exam2-raw) 2))) (: exam2-final (Number Number Number -> Number)) (check-expect (exam2-final 70 80 90) 90) (check-expect (exam2-final 100 90 95) 95) (check-expect (exam2-final 100 80 87) 87) ;; the original exam2 score (define (exam2-final exam0-raw exam1-raw exam2-raw) exam2-raw)
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 |