210 Sample Schedule


Functional Design

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


Functional Abstraction

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


Generative Recursion, Accumulation

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


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 in C]

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]

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