nifty - meta-information
What is so great about this assignment?
It uses an application that most students think they understand
well (a web browser) and reveals just a few of its implementation challenges.
It then (hopefully) shows students that challenges can be met with a little
bit of thought and a satchel full of well-worn data structures.
What niche/student is it suited for (CS1, CS2, advanced, easy, ...)?
This sequence works well in CS2, although the first part could work
as an advanced CS1 assignment.
What does it teach?
Real-world applications of data structures;
The need to think carefully about error-handling;
Like any sequence of exercises, design/extension/reuse
How hard is it?
Not very. That is, it requires a decent understanding of the
relevant data structures, but there are no algorithmic sneakinesses or
How long does it take?
We generally allow 2 weeks per part.
What does it depend on?
Students should be comfortable with file input and string manipulation.
What are its strengths and weaknesses?
- Students get enormous satisfaction from working on a
They gain an appreciation for the effort needed to produce large software
application programs. (They also become more tolerant of "buggy" browsers!)
There's little overhead for the student in understanding what her program
is supposed to do (roughly speaking)
It's the sort of assignment that can be bell'd and whistle'd to the
limits of the programmer's imagination and ability.
It anticipates a theoretical discussion of languages and parsing, especially
the difference between regular and context-free lagnuages.
Weaker students may feel overwhelmed by the idea of doing something
- Since each part is an extension of the previous assignment,
who fall behind have a hard time catching up.
Are there any lessons on assignment craft in general that can be drawn
from the assignment?
- Students are motivated by Internet-related assignments.
In the past,
we assigned other projects
that accomplished similar tasks, but in a different contexts (concordances,
We found the students much more willing to work at
this assignment, and many of them
added extra features that were not required.
There is a conflict between designing assignments that build up to a large
project, and designing assignments that are independent of one another.
We would like our students to learn to reuse and extend their code; yet
we would like the various parts to be sufficiently independent that
the students don't get "lost" if they have difficulty with an