Nifty Assignments Info

The Nifty Assignments project gathers 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 with your assignment.

Feel free to email questions to nifty-admin at

Where Did Nifty Assignments Come From?

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. The Nifty Assignments archive was thus born. Each year at the SIGCSE conference, the Nifty session presents a set of new additions to the archive.

How to Apply for Nifty Assignments

Do you have a great assignment you would like to share with other educators? We'd love to have you apply to Nifty!

The Nifty Assignments track is part of the annual SIGCSE Symposium. Proposals for assignments are submitted through the regular SIGCSE submission pipeline for consideration, typically due around the end of the summer.

The Nifty archive at has a web page for each accepted assignment. This web page introduces the assignment and links to the assignment materials ready for review or adoption by other educators. For your assignment to be considered, submit a draft version of the web page for your assignment along with zip of the assignment materials.

new We are using anonmyous submissions, so please make sure the author names and the name of the institution do not appear in the assignmemnt handout. We suggest replacing them with "xxxx" so they are easy to find and fix later. You do not need to anonymizes resources like screenshots and code libraries that are part of the assignment.

Reviewers for Nifty are drawn from the SIGCSE community, including many previous Nifty Assignments presenters.

What to submit: zip of assignment materials + index.html web page

A submission consists of a directory of assignment materials and a web page to introduce the assignment and provide the metadata to reviewers and adopters.

Gather the materials from your assignment. Both student-facing and instructor-use materials may be appropriate. For example:

  • The assignment handout given to students (PDF or HTML)
  • Sample data files
  • Starter and support code files
  • Autograder tools and/or model grading rubric
  • Possibly a runnable demo application
  • Prepare a draft of the web page for your assignment, including the table of metadata described below. The purpose of the web page is to introduce the assignment to another educator.

    Organize your submission in a directory with the name of assignment all lowercase (e.g. "baby-names") and your web page as the index.html. (Naming note: avoid pun/misspelling type names for your project. You want a name such that when someone does a google search with a couple words they remember, they get your nifty page.) Please put the above metadata 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 and whatnot. Foremost, the web page describes the assignnment for prospective instructors, while the handout for the students, starter code etc. is nested inside. 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 super-polished final form to apply. When we review them, the most important aspect is the quality of the assignment + its ancillary materials like handouts and starter code. You can always polish up the presentation if the assignment is accepted. That said of course a more polished package is easier for the reviewers to like.

    Create a .zip archive of your directory. Upload this zip to the Nifty track at the SIGCSE site. Update the instructions on the site say to use a lastname-firstname scheme for your .zip. Please don't do that as now we are anonymous. Just use a plain name like '' or whatever.

    The following table of metadata about your assignment should be included in your web page. This information is used by the reviewers to evaluate the proposal and by instructors considering adopting the assignment.

    Here's an example for the Random Sentence Generator assignment:

    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 course.
    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 build the 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.

    For Acceptance: Final materials, SIGCSE presentation

    If your assignment is accepted, you will need to...

    What Makes A Nifty Assignment?

    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...

    The most important aspect of a Nifty Assignment is that students love it and it teaches something many teachers want to cover.

    Note that Nifty Assignments do not necessarily need to be large or complex. A project might just do one thing well, such as David Levine's Sorting Detective. A small assignment is even easier for others to adopt.


    Q: I have a great idea of an assignment, can I subit the idea so people can try it?
    A: No. As a practical matter, Nifty Assignments is for assignments that have been tried with CS students and found to succeed there. You might try posting your assignment idea on the SIG-CSE list, especially if it solves a known area in the list of topics CS1 and CS2 instructors are interested in.

    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 before?
    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.