This might be more of a "Thinking about ALL of unit 3" thought... BUT
Another teacher gave me the advice of "don't let students get too far ahead." Letting students work ahead just makes the gap between students' knowledge greater and contributes to the inequity in the room.
Despite my best attempts to keep students together, I just am struggling to do that. Students will come in to class and say, I did all of the unit last night at home. In part, I am excited that they are loving the work... BUT that just crates a big problem for me as a teacher. Which, I know is selfish. I think I need to be more explicit about why I want them to work together or not work ahead. I also might start out the unit with some pair programming. I anticipate some complaints from students, but... we will see how it works, especially since the second unit is much longer and without as many hard stops - I need to have a plan to control student work flow.
For students who finish early, I am having students choose from the following:
* CSS or HTML in codecademy.com - this is the most user friendly option for students
* A student showed me http://projecteuler.net/ which has a few different problems that students can think through
* Start working through CS50
* Look into the Nature of Code and do problems from there (for students who have physics experiences)
I really only have students who are new to programming have them do HTML and CSS, but a few of them started doing some of these other tasks. My classroom is perhaps a bit unique in that this is the only CS class offered so students have this as their only option so I have a wide range of students abilities.
What other strategies do you have to keep students on the same page?