Nifty Assignments - SIGCSE 2018
|Summary||These assignments demonstrate how one can take key ideas from existing nifty assignments and remix them for different audiences using different contexts. Nifty ideas from the Boggle assignment (Zelenski, 2002) are remixed into a series of assignments solving grid-based games, and pieces of the Guitar Heroine assignment (Wayne, 2012) are remixed to model other musical instruments.|
|Topics||The first two assignments utilize queues, interacting classes, and user interaction in modeling different musical instruments. The remaining assignments utilize 2-D lists, data structure design, and recursive backtracking in solving different grid-based games.|
|Audience||The musical assignments have been used in Data Structures courses, while the grid-based game assignments have been used in Algorithms courses. All are written using Java, but could easily be translated into any object-oriented language.|
|Strengths||From an instructor's perspective, remixing nifty concepts in new contexts minimizes the time and effort required to create interesting assignments, while providing students with novel assignments. It also reduces the temptation to cheat, as solutions to new variants cannot simply be copied from past years.|
|Weaknesses||The musical instruments that students are asked to model require some explanation, especially related to how the queues map to strings. Similarly, each new grid-based game requires students to understand the rules before they can implement it.|
|Dependencies||Since all of these assignments involve interacting classes, some of which are given to students, they must be comfortable with complexity and object-oriented design.|
The Nifty Assignment session has been a highlight of the SIGCSE conference since 1999. More than 100 assignments have been presented over the years, with corresponding materials and supporting documents made available on the Web site nifty.stanford.edu. The brainchild of Nick Parlante and Julie Zelenski, the Nifty Assignments repository has been a highly valuable and impactful resource for computer science teachers everywhere.
Like many teachers, I have made extensive use of Nifty Assignments in my classes. However, adopting a Nifty Assignment is rarely as simple as downloading the documents and assigning it it my class. Sometimes the intended student level of the assignment does not match my students or the course in which I plan to utilize the assignment. Often, there are parts of the assignment that make sense for my students, but not the entirety. The reusability of Nifty Assignments can also be problematic. Due to the popularity of the Nifty repository, solutions to many of the assignments can be found online. Because I find Nifty Assignments to be highly motivating to students, I want to reuse assignments from year to year but not worry about the availability of solutions.
The answer to all of these challenges is remixing - identifying Nifty features from repository assignments and building them into locally designed assignments. For example, the Secrets in Images assignment, presented by Brent Heeringa and Thomas Murtagh in 2009, had a really nifty concept at its core: a text message (or even another image) can be hidden inside an image using the least significant bits in the individual pixel values. An instructor can be inspired by this concept, even borrow code and tools (e.g., an image viewer) from the Nifty Assignment, but build an entirely different assignment around that idea. Extracting nifty ideas from an assignment and remixing them into a new context allows the instructor to match the assignment to the desired skills and skill level of his or her students. It also enables the instructor to create variants that all use the same nifty concept, but in different contexts that appear unique to students. Below are a number of remixed assignments that demonstrate these benefits.
The Guitar Heroine assignment presented by Kevin Wayne in 2012 is a perfect example of an embedded nifty idea. The assignment involved modeling a guitar that can be "played" by striking keys on the keyboard. The nifty idea at its core is that a single guitar string can be modeled using a queue of numbers, with the pitch determined solely by the length of the queue. How that works and how the queue contents are converted to sounds by a library file are fascinating and almost magical to students. The guitar analogy is a bit of a stretch, however, as the notes sound more like piano or harpsichord strings.
The following assignments, both taken from recent Data Structures classes, start with the queue-based model for simulating a musical string but use those strings in completely different contexts. The first simulates a piano by mapping strings to keys on a computer keyboard, so that striking keys causes the corresponding wires to be struck (and their notes played). Students extend that by creating a player piano, which reads notes and chords from a text file and plays them in sequence. The second assignment again uses strings, but in modeling a fully functioning hammered dulcimer. Students map rows of keys on the keyboard to the rows of strings on a dulcimer, enabling them to play music using the same hammer strokes as the real instrument. In both assignments, students complete the string implementation (and so gain experience working with queues and classes), but as parts of larger, otherwise unique, assignments.
The Boggle assignment presented by Julie Zelenski in 2002 is a prototypical example of a grid-based game. For the assignment, students must represent the Boggle board (a 4x4 grid of letters), effectively search the board for words using recursive backtracking, and manage the game features. Since the game is familiar to many students and the end result is a program that the students can actually play with, it can be highly motivating. Fortunately, there are many grid-based games that have these same characteristics and are similarly solved using recursive backtracking. By selecting a new game, the instructor can create a new assignment that appears unique to students, but requires the same basic skills to solve (and limited instructor time to create).
The following assignments were all offered in sections of my Algorithms course. Each year, I search the Web for the newest grid-based puzzle game (BrainBashers is a great source) and remix the assignment to solve this game. Because the games are new, there are not freely available solutions and students enjoy solving a game that people are currently playing. The amount of work I have to put into the development of the assignment is minimal, and students practice the same skills each year but using a different game.