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 |