- 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
- write down what assumptions you’re starting from
- write down what you want to prove
- write down any useful equivalences
- e.g. 150 structural induction problems generally solvable by
- reverse step
- 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
- 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