On this page:
Details
Computing Environment
Homeworks
Late Policy
Pair Programming
Exams
Grades
DrRacket
8.10

Syllabus

Week

   

Topic

1

   

Programming, Computing, and How to Design Functions

   

Readings: 2, 3.1, 3.3, 3.4, 3.5

2

   

Designing Programs

   

Readings: 4.3, 4.4, 4.5, 5.4, 5.7, 4.6, 5.8, 6.1, 3.6

3

   

From Fixed-size Data to Large Data

   

Readings: 8, 9.2, 9.3, 9.4, 9, 10, 11

4

   

Designing Programs For Arbitrarily Large Data

   

Readings: 12, 14, 16.2, 16.3, 17.1

5

   

Designing Programs With Local/Lambda

   

Readings: 16.4, 17.2, 17.3, 17.4

6

   

Design With Abstraction

   

Readings: 15, 16.5, 16.6, 16.7

7

   

General Design With Arbitrarily Large Data

   

Readings: 19, 20

8

   

Universe

   

Readings: 17, 21, 23

9

   

Designing With Generative Recursion

   

Readings: 25, 26, 27

10

   

Designing With Accumulators

   

Readings: 31, 32, 33.2

11

   

Mutable State

   

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

12

   

Infinite data, two ways

   

Readings: none

13

   

Misc

   

Readings: none

14

   

Misc

   

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

   

Week 1

   

Programming, Computing, and How to Design Functions

01

   

09/06

   

`hello world', Information vs. Data

02

   

09/07

   

Designing Functions

   

1b

Lab 1

    

Day

   

Week 2

   

Designing Programs

03

   

09/11

   

Designing Functions: Some Practice

   

2a

04

   

09/13

   

Designing Programs: the Basics

05

   

09/14

   

Desiging Programs: Some Practice

   

2b

Lab 2

    

Day

   

Week 3

   

From Fixed-size Data to Large Data

06

   

09/18

   

Representing Arbitrarily Large Data

   

3a

07

   

09/20

   

Designing Functions: Arbitrarily Large Data

08

   

09/21

   

Arbitrarily Large Data: Practice Design

   

3b

Lab 3

    

Day

   

Week 4

   

Designing Programs For Arbitrarily Large Data

09

   

09/25

   

Designing Functions via Composition

   

4a

10

   

09/27

   

Designing Programs: Arbitrarily Large Data

11

   

09/28

   

Local Definitions, Anonymous Functions

   

4b

Lab 4

    

Day

   

Week 5

   

Designing Programs With Local/Lambda

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

   

5b

Lab 5

    

Day

   

Week 6

   

Design With Abstraction

15

   

10/09

   

Indigenous Peoples Day

16

   

10/11

   

Designing (with) Abstractions

17

   

10/12

   

Designing (with) Abstractions: Practice

   

6b

Lab 6

    

Day

   

Week 7

   

General Design With Arbitrarily Large Data

18

   

10/16

   

Designing Programs: Trees

   

7a

19

   

10/18

   

Designing Programs: Binary Search Trees

20

   

10/19

   

Designing Programs: Designing for Multiple Complex Arguments

   

7b

Lab 7

    

Day

   

Week 8

   

Universe

21

   

10/23

   

Big-bang, Universe, and Client-Server Programs

   

8a

22

   

10/25

   

Big-bang, Universe, and Client-Server Programs 2

23

   

10/26

   

More Complex Client-Server Programs

   

8b

Lab 8

    

Day

   

Week 9

   

Designing With Generative Recursion

24

   

10/30

   

Graphs with Generative Recursion and Accumulators

   

9a

25

   

11/01

   

More Generative Recursion

26

   

11/02

   

Graphs with Generative Recursion and Accumulators

   

9b

Lab 9

    

Day

   

Week 10

   

Designing With Accumulators

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

   

10b

Lab 10

    

Day

   

Week 11

   

Mutable State

30

   

11/13

   

set!

   

11a

31

   

11/15

   

set-box!

32

   

11/16

   

Practice with set! / set-box!

   

11b

Lab 11

    

Day

   

Week 12

   

Infinite data, two ways

33

   

11/20

   

Cyclic data and streams

   

12a

34

   

11/22

   

Thanksgiving

35

   

11/23

   

Thanksgiving Day

    

Day

   

Week 13

   

Misc

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

   

Week 14

   

Misc

39

   

12/04

   

Lambda Land

   

14a

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

For an assessment of your progress in this course, we will run three exams, each will be held during regular class time, and will be on-paper:
  • 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

You will get grades for your homework, labs, and exams. We will combine those together as follows:

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