nifty - meta-information
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
creeping subtleties.
-
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?
Strengths:
- Students get enormous satisfaction from working on a
"real-world" project.
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.
Weaknesses:
-
Weaker students may feel overwhelmed by the idea of doing something
"real".
- Since each part is an extension of the previous assignment,
students
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,
mini-compilers, etc.)
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
earlier segment.