• Ask them to draw a picture of the starting state and the final state.
    • Reason: Separate figuring out “what to do” from “how to do it”
    • Make sure they can:
      • relate variables to the picture
      • do a toy example by hand, entirely justified by the picture
    • They may need guiding for intermediate states
      • empirically, going backwards easier than going forwards
      • simplify the problem, get them to figure out what they need
      • reaction pathways, really..
    • especially useful for: C0VM, malloc, collect
  • Come up with systematic approaches and encourage their use.
    • Reason: If people are stuck on a problem, either 1. they don’t have the right tool or 2. they’re not applying the tool correctly. This addresses the former, helping the latter should be easy.
    • e.g. 122 style proofs encourage you
      1. write down what assumptions you’re starting from
      2. write down what you want to prove
      3. write down any useful equivalences
    • e.g. 150 structural induction problems generally solvable by
      1. step
      2. reverse step
      3. IH
      4. lemma
      5. invent lemma (almost never a good idea to mention this one…)
    • e.g. tracing 150 CPS
      • substitute every continuation with s0 s1 … and you find that they look the same
      • like built-in error checking, patterns will guide your work
  • Make sure they understand what they’re required to do for credit.
    • Credit: 122 internal TA training
    • Reason: Amazingly, people do not know what they are required to do for credit.
    • I’ve had people who were stuck on optional things for hours.. without realizing it was optional.
  • Always end with “explain in your own words back to me” before leaving someone at OH.
    • Reason: Most people don’t take good notes as they’re getting help. Make sure they know what to do after you go and have a logical sequence of steps in mind.
    • Plus they feel like they learned something this way.
    • Bonus points if you can make it sound like they were there all along, just missing tiny steps.
      • Need to build up their confidence wherever possible to prevent the “frozen in OH” where they stare into space until a TA gets there. They should keep trying.


  • Learn to draw analogies to Python.
    • Reason: Most people “know” Python, more likely to pay attention, concepts often transfer
    • range/generators: lazy programming, concurrency
    • list comprehensions: map + filter, powerful!! readable!!
    • Fun stuff to make them feel special and all
      • C0VM: dis.dis
  • Functional programming in general
    • Don’t tell computer what to do, tell computer what you want
    • No side-effects = no jumping around a codebase to figure out how a function works
    • Particularly well suited to transforming data

Personal Anti-tilt

  • Two-strike rule for RTFM responses, after which leave their Piazza post alone
  • Distinguish between people there for homework help, and people there to learn


  • 251 reductions: draw a table. List the variables of problem A on the left, and problem B on the right. Then you just need to connect arrows.

i’m free! time to stop for now

Written on June 23, 2018