Every spring, I teach a sophomore-level programming course that's required of all CS majors. The general idea is that the lectures are roughly 50/50 split between software engineering and algorithms. The projects are generally three weeks long with students working in pairs and are intended to get students over the hump from writing "toy" programs to "real" programs (as well as having some non-trivial algorithmic requirements).
In the past two years, one project we've used has been implementing a full text search engine that runs over your own files. You build an inverted index, save it out to disk, and have another program that reads the index to answer queries. Students turned out to hate the project, so it's time to try something else. My current idea is to make them implement something analogous to the search box on iTunes. As you type, it dynamically shrinks the list to incorporate only the elements that match the query. Mozilla, as of version 1.3 or so, has a similar feature for searching e-mail headers.
Needless to say, there are lots of different ways you could go about building acceleration structures, giving the students plenty of rope to hang themselves. My questions for the programmatically inclined here are:
- Does this project have enough sex appeal? I've found that students will work much harder if they can be convinced that a project is somehow "cool". A perennial favorite is
using genetic algorithms to breed pretty pictures.
- Does this sound like something that two college sophomores, working as a team, can finish in three weeks and have real-time response rates like iTunes?
- Can the existing Java widget set handle this kind of refresh rate, or do I need to ask them to fake up their own list widget?
- Are there other examples of code out there, particularly in Java, that have a feature like this that I can point students to as an example? Is there anything resembling an iTunes clone for Windows or Linux?
- My temptation is to have them load a CSV file and just pretend to be an MP3 player (or invoke an external one). What's the state of Java MP3/ID3 handling? How much harder would it be to slap together the rest of the pieces to have something approximating an iTunes clone?