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.
Homeworks are due Tuesdays & Thursdays at 9pm. The first one is due Sept 7.
`hello world', Information vs. Data
Designing Functions: Some Practice
Designing Programs: the Basics
Desiging Programs: Some Practice
Representing Arbitrarily Large Data
Designing Functions: Arbitrarily Large Data
Arbitrarily Large Data: Practice Design
Designing Functions via Composition
Designing Programs: Arbitrarily Large Data
Local Definitions, Anonymous Functions
Midterm coming up: 10/02 @ 10:30-11:35am
Practice with Anonymous Functions
Indigenous Peoples Day
Designing (with) Abstractions
Designing (with) Abstractions: Practice
Designing Programs: Trees
Designing Programs: Binary Search Trees
Designing Programs: Designing for Multiple Complex Arguments
Big-bang, Universe, and Client-Server Programs
Big-bang, Universe, and Client-Server Programs 2
More Complex Client-Server Programs
Graphs with Generative Recursion and Accumulators
More Generative Recursion
Graphs with Generative Recursion and Accumulators
Midterm coming up: 11/06 @ 10:30-11:35am
Designing Generative Recursive Functions
The Need For Accumulator Design
Practice with set! / set-box!
Cyclic data and streams
Midterm coming up: 11/27 @ 10:30-11:35am
AI & The End of Programming
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.
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.
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.
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.
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).
(1% per lab)
(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:
90 - 92
87 - 89
83 - 86
80 - 82
77 - 79
73 - 76
70 - 72
67 - 69
63 - 66
60 - 62