1 Goals of the course; what is computation; introduction to data types, operators, and variables Problem set 0 out
2 Operators and operands; statements; branching, conditionals, and iteration

Problem set 0 due

Problem set 1 out

3 Common code patterns: iterative programs

Problem set 1 due

Problem set 2 out

4 Decomposition and abstraction through functions; introduction to recursion

Problem set 2 due

Problem set 3 out

5 Floating point numbers, successive refinement, finding roots  
6 Bisection methods, Newton/Raphson, introduction to lists

Problem set 3 due

Problem set 4 out

7 Lists and mutability, dictionaries, pseudocode, introduction to efficiency  
8 Complexity; log, linear, quadratic, exponential algorithms Problem set 4 due
  Quiz 1 Problem set 5 out
9 Binary search, bubble and selection sorts  
10 Divide and conquer methods, merge sort, exceptions

Problem set 5 due

Problem set 6 out

11 Testing and debugging  
12 More about debugging, knapsack problem, introduction to dynamic programming

Problem set 6 due

Problem set 7 out

13 Dynamic programming: overlapping subproblems, optimal substructure

Problem set 7 due

Problem set 8 out

14 Analysis of knapsack problem, introduction to object-oriented programming  
15 Abstract data types, classes and methods  
16 Encapsulation, inheritance, shadowing

Problem set 8 due

Problem set 9 out

  Quiz 2 Problem set 9 due
17 Computational models: random walk simulation Problem set 10 out
18 Presenting simulation results, Pylab, plotting

Problem set 10 due

Problem set 11 out

19 Biased random walks, distributions  
20 Monte Carlo simulations, estimating pi

Problem set 11 due

Problem set 12 out

21 Validating simulation results, curve fitting, linear regression  
22 Normal, uniform, and exponential distributions; misuse of statistics  
23 Stock market simulation Problem set 12 due
24 Course overview; what do computer scientists do?