Wednesday, November 14, 2012

The Open-ended Project

I’ve been thinking a lot about projects the last month or so. You may have seen it in my posts. Mostly I’ve been talking in generalities but today I’d like to focus on a specific idea. last week someone, I don’t remember if it was Twitter or Facebook or a blog comment, mentioned that MadLibs makes a good project for arrays. So I have been thinking about how I might assign that as a project and avoid the whole recipe trap (see my recent post Project or Recipe) BTW I am pretty sure that MadLibs is copyright Penguin Press so I’m thinking more generally of “a phrasal template word game where one player prompts another for a list of words to substitute for blanks in a story, usually with funny results.” Thanks Wikipedia. Smile
The pretty standard way to assign a project like this is to specify quite a bit of detail. You could say things like “Prompt for words using an Input Box” for example. In fact you could spell out quite a bit of detail to create lines for students to draw inside. A sample output could be provided. IN short you could provide a fairly detailed recipe and say “make this.” But you might get 30 identical results turned in. Limiting.
Or you could make it open-ended and say  things like “the main requirement is that you use an array of word objects where one field is the word and a second field is the part of speech of that word. Now make a game  that uses this array.” OK yes, some students are going to freak out and demand more detail. Are you helping them if you give it? I’m not so sure.
Leaving it open may give you a lot of different projects. Students may use many different ways of acquiring the words for display. Command line, Input Boxes, Text boxes, even data files. The output may come out differently. The words may be used in different orders than entered. perhaps give students credit for implementing CompareTo so that lists can be sorted alphabetically under part of speech? What other options can they add to the word class? Maybe character length? Or plural format? Or ask to associate a gender which might make language independent versions easier? Does it even have to be in English (or the default language of your classroom?) Why not make it a world language project. Or make stories from different school subjects?
The big risk of making things this open-ended is students trying to do to much. Perhaps the way to handle that is to require a written plan with dates in it first. Review the schedule against dates regularly to make sure students are on target. I’ve written about feature creep and all-nighters recently. There are things to watch out for in large projects!
What do you think? Too open-ended? Not open enough? Too much except for a semester or final project? Are students going to toss up their hands and say “not enough information!” or are they going to warm to the task and create great projects? Have you tried something like this? What was it and how did it work out?
Related posts:

2 comments:

Unknown said...

All of my projects are open ended. I generally say things like, "create a project that uses lists and dictionaries." Or, "create a project that uses classes." And yes, I get a lot of different things, but that allows the students to see lots of different things. They all present their projects to the class,and often, that inspires students to try more complex ways of programming, or it allows them to see more efficient ways of programming. My requirements generally include creativity and complexity, but I only require the use of specific concepts when we're learning something specific.

Garth said...

I also use very open ended projects in my more advanced classes. I will give a general assignment like “Build a Space Invaders type game, i.e. things fall from above and you shoot or touch them”. I then start working on other smaller programs that contain the tools they might want to use for their project. How do we get something to move right and left? Arrows, mouse, tilt, touch (depending on the hardware)? How do we get something to fall? How do we detect a hit/contact/event? Each little project is less open ended with a specific learning goal so they can build a tool box of code snippets. They then use this “sub” knowledge to create their game. The primary project has a due date a long time away and allows me/them to hit a lot of topics on the way.