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

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/04

   

`hello world', Information vs. Data

02

   

09/05

   

Designing Functions

   

1b

Lab 1

    

Day

   

Week 2

   

Designing Programs

03

   

09/09

   

Designing Functions: Some Practice

   

2a

04

   

09/11

   

Designing Programs: the Basics

05

   

09/12

   

Desiging Programs: Some Practice

   

2b

Lab 2

    

Day

   

Week 3

   

From Fixed-size Data to Large Data

06

   

09/16

   

Representing Arbitrarily Large Data

   

3a

07

   

09/18

   

Designing Functions: Arbitrarily Large Data

08

   

09/19

   

Arbitrarily Large Data: Practice Design

   

3b

Lab 3

    

Day

   

Week 4

   

Designing Programs For Arbitrarily Large Data

09

   

09/23

   

Designing Functions via Composition

   

4a

10

   

09/25

   

Designing Programs: Arbitrarily Large Data

11

   

09/26

   

Local Definitions, Anonymous Functions

   

4b

Lab 4

    

Day

   

Week 5

   

Designing Programs With Local/Lambda

12

   

09/30

   

TBD

13

   

10/02

   

Practice with Anonymous Functions

14

   

10/03

   

Similar Functions

   

5b

Lab 5

    

Day

   

Week 6

   

Design With Abstraction

15

   

10/07

   

Designing (with) Abstractions

16

   

10/09

   

Designing (with) Abstractions: Practice

17

   

10/10

   

Designing Programs: Trees

   

6b

Lab 6

    

Day

   

Week 7

   

General Design With Arbitrarily Large Data

18

   

10/14

   

Indigenous Peoples Day

   

7a

19

   

10/16

   

Designing Programs: Binary Search Trees

20

   

10/17

   

Designing Programs: Designing for Multiple Complex Arguments

   

7b

Lab 7

    

Day

   

Week 8

   

Universe

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

   

Week 9

   

Designing With Generative Recursion

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

   

Week 10

   

Designing With Accumulators

27

   

11/04

   

TBD

28

   

11/06

   

Designing Generative Recursive Functions

29

   

11/07

   

The Need For Accumulator Design

   

10b

Lab 10

    

Day

   

Week 11

   

Mutable State

30

   

11/11

   

Veterans Day

   

11a

31

   

11/13

   

set-box!

32

   

11/14

   

Practice with set! / set-box!

   

11b

Lab 11

    

Day

   

Week 12

   

Infinite data, two ways

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

   

Week 13

   

Misc

36

   

11/25

   

TBD

37

   

11/27

   

Thanksgiving

38

   

11/38

   

Thanksgiving Day

Lab 13

    

Day

   

Week 14

   

Misc

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🔗

For an assessment of your progress in this course, we will run two exams, that will be run on your computer via Hourglass — the companion exam-server to Handin’s homework-server.
  • 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🔗

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

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