Today I’d like to share a half-baked idea for a programming exercise. But first, some context:
One day in a high-school art class, our teacher announced that we would be painting a still life. He placed a jumble of random objects in the middle of the classroom and asked us to set up our easels in a circle around it, facing inwards. We began to paint, but after five minutes he stopped us and asked us all to put down our brushes, move to the next easel around the circle, and continue painting right where the previous student had left off. Five minutes later, up and around again. We continued this pattern for an hour, and when the class ended we had a dozen truly collaborative paintings of the scene; each student had contributed to every painting. Neat, right?
NIH Syndrome and rewrite the entire project from scratch.
At the end of each stage, each student checks in their project to a central repository (because we all took Lisa’s article to heart and taught the students how to use source control tools, right?).
Randomly assign every student a different student’s solution to stage 1 to use as their basis for a solution to stage 2. The projects should anonymized as much as possible, to discourage students from directly contacting the original author(s) with questions.
Repeat steps 2-4 as many times as necessary to fully solve the original problem.
Finish up with a group discussion/post-mortem/critique. Here, the students can talk about the challenges they met at each stage of the problem, mock each other’s poor implementation decisions. Eventually, let the class degenerate into an open fistfight over variable naming conventions and brace-matching styles.
Do my work for me!
I’m actually in a perfect position to put this theory to the test: I’m currently teaching a game programming class one evening a week at a local college. I just haven’t figured out the right problem yet. It needs to be an interesting multi-stage task, reasonably difficult but not so tough that anybody’s going to run into a brick wall, and with enough flexibility at every stage that there’s a number of viable implementation approaches. I’m also not really sure how many iterations to run — ideally, enough to drive home the desired lessons, but not so many that it becomes tedious. And frankly, I’ve also been reluctant to use my own students as guinea pigs…
Do you have any suggestions? Please speak up in the comments!