The Nifty Assignments project attempts to gather together great CS assignments to make their ideas and materials freely available for the CS-education community. This page gives some background on Nifty Assignments and explains how to apply for Nifty Assignments.
At the SIGCSE conference, I would often see a neat assignment idea go
by as a peripheral part of a talk. Knowing that great assignments
are such a tricky and time-consuming part of putting together a course,
it was natural to create a forum focused on the very practical problem
of finding the best assignments within the CSE community and making
their materials freely available.
Over the years, Nifty Assignments have spanned quite a range. Nonetheless, here's my attempt to distill some of the features that make a Nifty Assignment...
These are just tendencies, not hard and fast rules, and there are great
Nifty Assignments that go against one or more of them. All that really
matters is that it's a great assignment that will be of interest to
instructors. Also, Nifty Assignments do not necessarily need to be
or complex. A project might just do one thing well, such as David
Detective or Julie Zelenski's Quilt/Drawing
program. They address a problem of interest to many courses, and their
small focus makes them all the easier to adopt.
For each Nifty Assignment there is a short blurb in the bulletin, a 15 minute talk given at the SIG-CSE, and finally a web page, (available from http://nifty.stanford.edu/) that contains assignment material ready for study or adoption. For each assignment, there is material from the assignment itself -- things an instructor can use to study or adopt the assignment...
Not all of the above is required; sometimes there's just a handout, and
that's enough for an interested instructor to get the idea. In general,
we have not provided solution code on the site, although it may be
from each author. (Someday we could put together a more formal
For example, my 1999 assignment, Darwin's World, is pretty thin on material: just a handout, some data files, and some meta-writeup. My 2001 Assignment, Tetris, goes to the other extreme: there's starter and support code files, a handout, a sample application, an architectural overview, and a meta-writeup. Many of you may remember Julie Zelenski's 1999 assignment, the Random Sentence Generator, which has a hilarious online version (all of these nifty assignments are linked off http://nifty.stanford.edu/).
We collect meta-information about each assignment to help
instructors understand where each assignment fits...
This information helps people sift through the many assignment. I want
to do a better job of emphasizing meta information in the submissions.
I think that people are so accustomed to writing up their assignments
for students, it's hard to shift gears and add the information of
interest to other instructors. To help things along, we're using the
table format below to help call-out the meta information in a standard
way. Here's an example using the old Random Sentence
|Summary||Random Sentence Generator --
build a sort of grammar structure in memory -- lots of uses of
pointers, collections, and hashing. Then use a simple recursion over
that structure to generate random output.
||A neat application of recursion
and pointer-intensive data structures.
||Appropriate for CS2 or a later
||This is an intermediate to
advanced assignment, taking 1 or 2 weeks for a CS2 student.
||The great strength of this
assignment is that the grammars and their output can be quite funny.
Also, the data structure and the recursion are moderately complex but
neat. Students like this assignment.
||Some parsing is required to
grammar, which is not that fun. Also, this is not a concise, focused
pointer/recursion problem. It has more heft to it.
||Requires and understanding of
pointers, recursion, and enough sophistication to deal with a data
structure with 2 or 3 layers to it. Works fine in many languages.
Hashing may or may not be used. The data structure has a natural
map/collection structure, so using library classes can make it easier.
||Because there are quite a few
collections in the RSG, we have used it as a nice driver for students
to implement their own collection that is instantiated in several
places to build the RSG.
To apply for Nifty Assignments, we want to see a draft of what the web
page for your assignment would look like. We're interested in the
and its materials, and the above meta information of what the
is good at and where it fits in the curriculum. To apply for Nifty
these things don't need to be in final form -- just roughed out enough
that we can get good sense of the assignment.
Most of the judging is based on the assignment idea: a neat assignment that covers important topics. That said
of course a more polished package always looks better.
Put together a prototype version of what your Nifty Assignments web page would look like. Create a directory with your name and the name of the assignment (e.g. "Parlante-NameSurfer") containing an index.html that describes your assignment, its structure, how it works. (Naming note: avoid pun/misspelling type names for your project. You want a name such that when someond does a google search with a couple words they remember, they get your nifty page.) Please put the above meta-information table near the top of the index.html, and you can add more information below. Add supporting materials to the directory and link them from your index: handouts, sample applications, etc.. Please use relative links, so we can move the directory around and it all still works. It is not required that your directory be in final form to apply. The reviewers are evaluating the quality of the assignment itself and its applicability to the CSE community, not the details of the presentation at this stage.
Create a .zip archive of your directory and email it to firstname.lastname@example.org with 'nifty' in the subject line. I will email back a short confirmation that your application has been received within a couple days, and we can deal with any file snafus at that time. Applications are reviewed by previous Nifty Assignments presenters.
If accepted, you will need to...
If you've got a nifty assignment, we'd love to hear from you!
Q: Does my assignment need to be a gigantic production?
A: No. Small ideas can work very nicely -- for example Julie Zelenski's Quilt or David Levine's Sort Detective. The gigantic assignments make spectacular demos, but small assignments are actually easier for other instructors to adopt.
Q: Do I need to have all the assignment materials done and in final
form when I apply?
A: No. You want to have enough material in decent shape that the reviewers can evaluate the assignment. The reviewers focus on the quality of the assignment itself and its applicability to the CSE community, not the the details of the presentation at this stage. If your assignment is accepted, then you can start worrying.
Q: Is it required that this assignment has never been published
A: No. This is not a formal policy exactly; it's just what we've done. We have published assignments that had appeared in earlier CSE talks or papers. The justification being that we put the assignment before a wider audience and (compared to appearing as a side-point in a paper), we make the assignment files, handouts, etc. available in a uniform way. However, we do avoid publishing assignments that are too similar to previous Nifty assignments.
Q: Do I need to be a Nobel laureate like Julie Zelenski or a
super-model like Owen Astrachan to apply for this?
A: No. Nifty Panelists are reassuringly ordinary academics. Their bizarre energy in the panel itself is due to the special Nifty Shakes we get at Starbucks. That, or something to do with Dan Garcia. Seriously, you just need to be an instructor who has given an assignment, where that assignment worked very well, and now you are ready to write it up and share it.