One of the things that computer science teachers all seem to struggle with is coming up with projects to assign their students. I was thinking about this after reading Robb Cutler's latest at the Computer Science Teachers Association blog. OK try and follow my twisted logic. Perhaps it's as interesting (or boring or wierd depending on your point of view) as Scott Adams (of Dilbert fame) writers block post.
Robb was using Sudoku puzzles as an example of problem solving. He was pointing out that the sort of talents and skills that people use to solve those puzzles was exactly the sort of talent and skills that are useful in computer science. He's right of course. The whole pattern matching thing is highly useful in computer science. I was of course somewhat distracted by the thought "how would I write a computer program to solve a Suduko puzzle. That lead directly to how would I assign it to a class and what sort of things would I be using it to reinforce.
For the most part programming projects just sort of came to me. I'm not saying that all the projects I assigned were original. Nothing could be further from the truth. A lot of them came from textbooks. Many came from talks with other teachers. The Nifty Assignments panel is one that I never miss at SIGCSE. The supporting web page for the Nifty Assignments discussion has an archive of projects from past sessions here. I highly recommend that page and the SIGCSE conference itself.
But still some of the best projects I assigned came from (almost) thin air. Discussions with students inspired a number of them. A class discussion about a topic lead to talk about how you would use something which lead to brainstorming about potential projects. More than once we came up with a project on the spur of the moment and it became a assignment. There is good and bad here. The bad is that I, of course, had to go out and write the program myself. There is no sense in assigning a program if a student can not practically finish it in a reasonable time. On occasion this exercise (writing the program myself) showed that there was a concept they needed that they had not been taught or some other thing that made it necessary to modify the project. But the good, and very good it was, that came from these projects is that the students felt some ownership of the project. It was for them and from them. It meant something to them. And that always meant a higher class of work.
So keep an open mind during classroom discussions for potential assignments. Also think about the sorts of puzzles that intrigue you – they may very well intrigue your students as well. One more thing – keep an eye out for students in your school who like puzzles. Maybe you can get them to think about the great puzzle solving business that is computer science.