## 210 Sample Schedule

Functional Design

| Week 1: Basic Scheme, Basic Design Recipes [Lab topic: Editing, (Hand) Evaluating with DrScheme, Design Recipe (Outline)]
1 | What is Computation? What is Programming? Processing Numbers |
2 | Processing Intervals (Conditionals) |
3 | Processing Lists of Fixed Length (Structures) |

| Week 2: Simple Recursive Recipes [Lab topic: How to Use Design Recipes, define-struct]
4 | Processing Lists of Arbitrary Length |
5 | Design Recipes |
6 | Rules I: Syntax and Evaluation |

| Week 3: Complex Recursive Recipes [Lab topic: Developing Recursive Functions with Recipe]
7 | Programs that Construct Lists |
8 | Processing Family Trees |
9 | Different Family Trees; Natural Numbers |

| Week 4: Programs Composition [Lab topic: Practice with Deep Recursion [S-expression]]
10 | Files and Directories |
11 | More on Files; Functions that Process Two Complex Arguments |
12 | The Scope of Things and LOCAL |

Functional Abstraction

| Week 5: Abstraction, Functions as Values [Lab topic: Practice with Deep Recursion [S-expression]]
13 | Insertion Sort and Functional Abstraction |
14 | Practice with Using Functional Abstractions |
15 | Data Abstraction, Contracts with Variables |

| Week 6: More on Functions; Generative Recursion [Lab topic: Abstraction and Iterators]
16 | Mathematical First-Class Functions |
17 | Quick Sort, Binary Search |
18 | The Recipe; Sierpinski |

Generative Recursion, Accumulation

| Week 7: Generate and Recur [Lab topic: LAMBDA and more iterators]
19 | Gaussian Elimination |
20 | Backtracking |
21 | BREAK |

| Week 8: Accumulators [Lab topic: Compare evaluations: space vs time (factorial); Single Pass]
22 | Planning a Route -- With Accumulator |
23 | Making a Schedule |
24 | Transforming Numeric Functions into Accumulator-Style |

Imperative Program Design

| Week 9: Motivating State-Changing Functions [Lab topic: State Change, Syntax of C]
25 | Functions their History |
26 | State of Real-World Objects |
27 | Rules III, especially set! vs Structure Mutation; Equality |

| Week 10: More on History; Recording and State-Change [Lab topic: Simple Vectors]
28 | Graphs with Cycles |
29 | Vectors I: Building and Reducing |
30 | Vectors II: Iterating |

Inside the Machine, Programming the Machine

| Week 11: A Model of the Real Machine [Lab topic: Interacting with the JAM2000, Imprecision of Number Systems]
31 | How the Man in the Machine Really Works |
32 | Simple Machine-Level Programs |
33 | Modeling a Machine |

| Week 12: Programming the Machine [Lab topic: Translating from Simple Scheme to C]
34 | Plain Assembly Language |
35 | C-style Assembly Language |
36 | Implementing Simple Scheme Functions in C |

What is Computer Science?

| Week 13: Many Levels of Abstraction [Lab topic: Core C: Practice]
37 | Marx and Hegel: From Scheme to the Machine and back |
38 | Assembly vs C vs Scheme: Who manages what? |
39 | The Halting Problem |

| Week 14: From Functional Design to Object-Oriented Design [Lab topic: Using JDK, Applets]
40 | Java I: Objects and Design |
41 | Java II: Objects and State |
42 | Conclusion |

Matthias Felleisen | This page was generated on Fri Mar 5 09:04:57 CST 1999.