I ran into an interesting blog entry yesterday by a university student. In it he bemoans the attitude of some of his peers regarding assignments that are too complex. This student has, I think, the right idea.
For me, I personally feel that Assignments/Projects are the training grounds for you to really experiment new stuff and learn. It's extremely important to learn when you're in school and make mistakes. What did we pay school fees for? Right? Its to LEARN!
As teachers one of the main reasons we assign projects, homework and give exams is of course to see what students know and to give them grades. And grades are important - or so I am told. But I like to think that the assignments I gave were first and formost learning experiences. In many of my courses I used to assign complex projects rather than giving a final exam. These assignments involved, as much as possible, a compilation of all of the matterial covered in the course. I like to think that as a grading tool they were effective in judging how much of the matterial had been learned well enough to use to impliment something complex. What I also found, and what a lot of students over the years confirmed, was that a major project like this was a learning experience.
Student after student told me that they never really understook how thing "fit together" until they were used together in a complex project. During the course of a semester we focus on small pieces of the whole. We have to because students, especially younger students, can only grasp smaller pieces at a time. During this phase we assign mostly small, simple projects that exercise the current concept under discussion. This works as a teaching/learning tool but it somewhat artifical in programming. Most programming efforts are larger and more complex. Sooner or later people need to work on a large project. The Advanced Placement Computer Science exam, taken by some 20,000 high school computer science students each year, uses a large case study for this purpose. The case study is the first introduction to a larger more complex project for many students.
If a school has a programming course before APCS (and I think they should if only to get more students interested in programming) there is generally no similar large project. Unless there is a semester project that wraps everything together. If I were to have one recommendation to high school CS teachers teaching a first course I would recommend that they use a large semester project in place of a final exam. Let students experience a larger project.
One last thing. The Project Hoshimi Programming Battle may be a good complex project (or case study) for some students. Pat Phillips at her Editor's Corner has an introduction to a number of teaching objects that can be used with this contest by teachers who want to teach with a case study. Check it out.