Lesson 1: Winning Poker Hands
Steps of the design process; Developing for clarity and generality;
Arguments for program correctness; Experimentation and simulation.;
Design tradeoffs; Simplicity and Clarity. Decomposition and composability.
Lesson 2: Back of the Envelope
Back of envelope calculations; When to use brute force and when to be
clever; The Zebra puzzle; Generator expressions; Permutations and
combinations. Cryptarithmetic; Recursive and wishful thinking; Longest palindrome
Lesson 3: Regular Expressions, other languages and interpreters
Defining the language of regular expressions; Interpreting the language;
Defining the set of strings matched by a regular expression;
Lesson 4: Dealing with complexity through search
Search: finding your way with a flashlight or boat; pouring water.
Analyzing the efficiency of an algorithm; Recurrence relations; Matching
data types with algorithms.
Lesson 5: Dealing with uncertainty through probability
Probability: the game of Pig; Maximizing expected utility to optimize strategy.
Lesson 6: Word Games
Managing complexity; Large sets of words; Appropriate data structures; Word games.
Lesson 7: Conclusion
Interviews and Practice Exam