Week 1: Basic Scheme, Basic Design Recipes [Lab topic: Editing, Evaluating]
1 | What is Computation? What is Programming? Processing Numbers | |
2 | Processing Intervals, Finite Lists | |
3 | Processing List of Finite Length (structures) |
Week 2: Simple Recursive Recipes [Lab topic: How to use Design Recipes, Hand Evaluation in DrScheme, define-struct]
4 | Processing Lists of Arbitrary Length | |
5 | Design Recipes for Recursive Data | |
6 | Rules I: Syntax and Evaluation |
Week 3: Complex Recursive Recipes [Lab topic: Counting Recursions, Complexity, LET to Reduce Complexity]
7 | Programs that Construct Lists | |
8 | Processing Web Pages, Family Trees | |
9 | Two Functions Process One Argument: Insertion Sort |
Week 4: Programs Composition [Lab topic: Program Composition]
10 | Functions that Process Two Complex Arguments: Merge | |
11 | In-Class Exam | |
12 | Functions are People, too |
Week 5: Abstraction, Functions as Values [Lab topic: Practice with Recursion [Files]]
13 | Data Abstraction | |
14 | Abstracting Templates; Iterators | |
15 | Comparing Styles; Iterative Evaluation vs Full Recursion |
Week 6: More on Functions as Values [Lab topic: Abstraction; Practice with Iterators]
16 | Mathematical First-Class Functions | |
17 | Rules II: Functions and Scope | |
18 | Break Break Break |
Week 7: Generative Recursion [Lab topic: Practice; Games]
19 | Gaussian Elimination | |
20 | Binary Search, Quick Sort | |
21 | Making Change, Planning a Route in a Graph |
Week 8: Accumulators [Lab topic: Imprecision of Number Systems]
22 | Planning a Route -- With Accumulator | |
23 | Making a Schedule | |
24 | Transforming Numeric Functions into Accumulator-Style |
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 in C]
28 | Graphs with Cycles | |
29 | Vectors I: Building and Reducing | |
30 | Vectors II: Iterating |
Week 11: A Model of the Real Machine [Lab topic: Interacting with the JAM2000]
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 |
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 |