Project-related deadlines are shown in red. Note that that there will be no extensions for projects!

Part 1: Introduction to Computer Science and Programming (Weeks 1-8)

Week 1: Basic Recursive Design and the Command Line

  • Tuesday: Introduction to Python, elements of basic recursive design
    • Lists, basic principles, etc..
    • Factorial, fibonacci
  • Lab: Setup CS accounts
  • Thursday: Principles of Basic Recursive Design

Week 2: Execution Principles

Week 3: Algorithm Specifications, Higher-Order Functions, and Graphs

  • Tuesday: Fully-Specifying / Implementing Insertion Sort, Binary Search, and Lambdas
  • Work on Project 2
  • Thursday: Graphs and Introducing Project 3

Week 4: Kris Gone to ICFP

Week 5: Variable and Mutable State

Week 6: Exam Review, Classes Preview, and Exam

Week 7: Fall Break!

Part 2: Data Structures Design and Implementation (Weeks 8-fin)

Week 8: More Classes, Linked Lists, and Stacks

  • Tuesday: Classes Review and Livecoding Linked-Lists
  • Thursday: Operations on Linked-Lists
  • Project 6: Beginning HaverQuest, and Linked List implementation

Week 9: Binary Trees, Balancing Trees

  • Tuesday: Binary Trees
  • Thursday: Balancing Trees: AVL trees and Red-Black trees

Week 10: Hash Functions and Hash Tables

  • Tuesday: Hashing and Hash Functions
  • Thursday: Implementing Hash Tables
  • Project 7: Hash Tables, Map Data, and Player Inventory

Week 11: Heaps and Binomial Heaps

  • Tuesday: Priority Queues and Heaps
  • Thursday: Binomial Heaps

Week 12: Exam Review and Coding Exam / Exam 2

  • Tuesday: Exam Review
  • Thursday: Coding Exam
  • Project 8: Prioity Queues and HaverQuest AI

Week 13: Sets, Persistent Hash Tables, and the Hash Array-Mapped Trie

  • Tuesday: Representing Sets and Persistent Datastructures
  • Thursday: The Hash Array-Mapped Trie

Week 14: Coding up HAMT and AI Competition

  • Tuesday: Coding up HAMT
  • Thursday: AI Competition

Final Project

  • HaverQuest: The Game