ICS 33 Summer 2013
Schedule


This is a schedule of what we'll be covering in lecture, what days exams will be given, and other key dates (including project due dates) during the quarter. As this course has no textbook, there will be no assigned textbook readings, though I may occasionally assign online reading from the Internet; when that happens, it will be listed in the Readings column below.

Date Lecture Topics Readings Project Work
Week 1
Tu 6/25
  • Course introduction and goals
  • Names and binding
  • Namespaces
  • Why dictionaries are used to implement namespaces
Th 6/27
  • Classes in Python, revisited
  • What's really inside of an object?
  • The length of an object
  • The "booleanness" of an object
  • Short-circuited boolean operators
  • Special methods and operator overloading
Week 2
Tu 7/2
  • Special methods and operator overloading (continued)
Th 7/4
  • University Holiday — Independence Day — NO LECTURE OR LABS TODAY
Week 3
Tu 7/9
  • Why write unit tests?
  • The unittest module in Python
  • Test-driven development
W 7/10 Project #1 due 11:59pm
Th 7/11
  • Namespaces, revisited
  • The namespaces belonging to objects, classes, modules, and functions
  • Accessing a namespace using the __dict__ attribute
  • Lookup rules
  • Inheritance in Python
Week 4
Tu 7/16
  • Inheritance in Python (continued)
  • Superclasses and subclasses
  • Lookup rules in the presence of inheritance
  • How inheritance is different from duck typing
Th 7/18
  • Containers in Python (briefly)
  • Why implement custom containers?
  • Implementing indexing and the in (and not in) operators
Week 5
M 7/22 Project #2 due 11:59pm
Tu 7/23
  • Implementing slicing
  • A more complete example of a custom container
Th 7/25
  • MIDTERM — regular lecture time and location
Week 6
Tu 7/30
  • "Protocols" (or, interfaces) in Python
  • Containers, sequences, and mappings
  • Iterables and iterators
Th 8/1
  • Classes, functions, and modules as objects
  • What it really means to create a class
  • What it really means to create a function
  • Creating functions or classes inside of other functions or classes
  • Brief introduction to functional programming
  • Higher-order functions (briefly)
Week 7
Tu 8/6
  • Algorithm analysis and O-notation
Th 8/8
  • Algorithm analysis and O-notation (continued)
  • Analyzing loops in Python using O-notation
F 8/9 Project #3 due 11:59pm
Week 8
Tu 8/13
  • Analyzing algorithms you haven't written yet
  • Understanding and analyzing the implementation of lists in Python
  • Stacks
  • Queues
  • Objects and references in Python (revisited)
  • Immutable and mutable objects
Th 8/15
  • Linked lists
  • Nodes and how they are linked
  • Variations on linked lists
  • Writing a linked list class in Python
Week 9
Tu 8/20
  • The importance of a layered software design
  • Considering the design of Project #4 in detail
  • Generators in Python using yield
Th 8/22
  • Generators in Python using yield (continued)
  • Recursive functions, revisited
  • Trees
  • Binary search trees
Week 10
M 8/26 Project #4 due 11:59pm
Tu 8/27
  • Binary search trees (continued)
  • Recursive generators using yield from
Th 8/29
  • FINAL EXAM: 5:00-6:20pm, PSCB 120