Getting help: When working on individual projects and on problem sets, students will often need help from teachers. It is important to create structures to allocate teacher time so that pushier students can’t dominate, and to build a culture where it’s a good thing to be stuck, to need help, and to seek help.
One useful tool is the help queue, simply a list on the whiteboard where people can sign up if they need help. All the people sign up at the beginning of class get helped in a random order (to prevent a rush). Respect the queue.
Encourage students to seek help from peers. And to look for help online. In particular, it’s not OK to sit idly waiting for help from a teacher.
When many students are having the same issue, it may be time to schedule a mini-lesson, 10 or 15 minutes dedicated to working an example to address the issue in a side part of the classroom. All students would be invited (but generally not required to attend). This would generally take priority over helping individuals, since it can help many people at once.
When a student is really struggling and needs ongoing support, it can be helpful to break things down into small tasks, help the student get to the point where she can tackle one, and then say, “It looks like you can do this part. Can I go help somebody else and then check back in with you in five minutes?” Make sure you do!
Github issues will make it easier to create a practice of identifying problems and asking for help offline. This could be productively combined with office hours. If this turns out to be helpful, it could be nice to occasionally make this work visible in class, for example by starting class off by presenting an interesting bug. (Some students will be much more comfortable asking for this kind of help; when they see that others are doing so, it can help them to also ask for help.)
Stanford CS TA’s often had a practice of not looking at students’ code (they wanted to help debug thinking, not code). We believe this is not a helpful stance for supporting beginners.