Learning is enhanced when course materials are relevant to students’ interests and goals, and nothing works better than letting students choose what they want to pursue. When possible, allow students to choose from among a set of problems or assignments, or to choose the topic area to be addressed in a particular assignment.

Some suggestions

Make it their own. The technical requirements stay the same but let students choose the inputs (sound or graphic files, data sources) and/or the form the output takes. The EngageCSEdu collection has lots of great examples!

Be creative with extra credit. The quickest way to add student choice is to incorporate into an existing assignment an extra credit option that challenges students to explore their own application of a concept.

Let students select from a finite list of options. Students do best with bounded, rather than completely open, choices. So within a project or assignment, let students choose a topic or element from a list of possibilities. Ideally, devise the list from actual student input and not from stereotypes or conjecture on what students like.

Examples from the collection

Dynamic Word Clouds

This project, the 4th unit in a year-long high school introductory programming course, teaches students how to write programs that draw text objects in an individually designed word cloud. It uses the programming language, Processing (www.processing.org), which is a simplified form of Java.

In the 1st section of the project, students learn these new text methods, and are introduced to the for-each loop. They learn how to isolate transformation operations [ translate() / rotate() ] - that are used to render each word - from having side-effects on subsequently drawn words by book-ending drawing commands between pushMatrix() and popMatrix() calls. In the 2nd section, students derive and implement the mathematics involved in animating the word cloud.

The Word Cloud program intertwines these new concepts with the major programming concepts revisited from the first 3 units: variables, conditional statements, Boolean expressions, arrays, classes, iteration and movement.

Summary of the objectives of this assignment:

Engagement Excellence

Introductory EarSketch Assignment

In this tutorial, students will learn how to navigate the EarSketch environment, and begin to use Python commands through the exploration of a song. Students are then invited to create their own song(s). After this tutorial, students will be able to use EarSketch's full curriculum and acquire deeper knowledge about Python and music composition and remixing.

This exercise is appropriate for high school-level AP CS Principles courses and well as CS0 courses at the collegiate level. This exercise is derived from a tutorial developed for the Hour of Code. It can be completed by following the instructions in the attached documents and working in the EarSketch environment (earsketch.gatech.edu).

EarSketch is a free and online learning environment. No prior knowledge in music or Python are necessary to teach this exercise. With EarSketch, students code in Python to place samples from a vast sound library into musical tracks, arrange them, and add effects.

Engagement Excellence

Simple graphics

In this project students work in pairs to create a drawing. Using a provided graphics library, students must create a drawing whose location, size, and other parameters can be changed with different calls to a function. Students are allowed to choose what to draw, and there is a competition for the best drawings. In addition to teaching graphics, the project also requires students to work collaboratively on abstracting and decomposing their code.

Engagement Excellence

Resources

A Game!

In this assignment students create a game called 'Cowboy, Ninja, Bear' in Python. By creating a game in segments, students are tasked with building and testing incremental features of the game until all possible permutations within the game (using the predefined win-state outcomes) have been successfully met. The activity requires students to use a design document to outline and support their development process.

TT Securities, Incorporated

In this assignment students work either individually or in pairs to manage and analyze stock prices via a text menu. Students must write a function that asks the user what they want to do, providing nine options: input a new list of stock prices, print the current list, find various statistics, find the best day to buy/sell the stock in question, and quit the menu. Students may not use built-in functions, and must therefore write functions like sum, min, and max themselves using loops. In addition to reviewing i/o and loops, this assignment requires students to decompose their code thoughtfully. It is particularly useful for students who are new to loops and need additional practice with decomposition.

Looks Good!

In this assignment students work either individually or in pairs to write a series of image-processing functions. Using list comprehension, students must write functions that invert the colors of an image, change the colors to greyscale, change the image to black and white, flip the image, and mirror the image. Students are also encouraged to be creative and come up with their own alterations. This assignment covers list comprehension on multidimensional lists. It is particularly useful for students who are new to multidimensional lists and need additional practice using list comprehension on them.

Sorting out Caesar!

In this assignment students work either individually or in pairs to write functions that encode and decode a Caesar cipher, along with several other sorting and string problems. Students must write functions that encipher a message by rotating the letters and decipher a message by looking at letter frequencies in the enciphered message. Additionally, students must write functions that sort a binary list, sort a general list, find the number of characters shared between two strings, and find the least common subsequence of two strings. In addition to requiring students to work with recursion, strings, and list comprehension, this assignment requires students to design their own algorithms. It is particularly useful for students who are comfortable with the topics covered but need additional practice designing algorithms.

The sleepwalking student

In this assignment students work to write a program that simulates a random walk. Using recursion, students must write a function that continuously randomly selects left or right and keeps track of how far the random walker has moved. They must then analyze their random walks to find how far the random walker travels on average. In addition to reviewing recursion and random number generation, this assignment requires students to create debug statements that print additional information. It is particularly useful for students who are new to recursion and need additional practice debugging.

Rochambeau

In this assignment students work either individually or in pairs to write a program that plays the rock, paper, scissors with the user. Students must prompt the user for a choice of move, choose a move for the computer to make, and then display the results of the game. Students can choose whether their program plays honestly or cheats. This assignment requires students to work with basic console i/o and variables. It is particularly useful as a first assignment.

vPool Project

In this project students work either individually or in pairs to write an open-ended game loosely based on pool. Using VPython, students must write a pool-like game with a cue ball (or other object) that the player controls directly, other balls, walls, and some kind of hole in which the balls can fall (or other goal). These different objects must be able to interact simultaneously with some semblance of physics, either realistic or wacky. In addition to requiring students to work with graphics, this project allows students to work on creating their own programatic design. It is particularly useful for students who need additional practice designing and then implementing large programs.

The Evolution of Picobot

In this project students work either individually or in pairs to write a program that generates random Picobots, robots that move around a world according to a set of rules, and creates subsequent generations by "mating" the "fittest" Picobots. Students must write at least two classes, one to represent a Picobot program and one to represent a Picobot world. They use these classes to generate a random generation of Picobots to begin and assess the fitness of each Picobot, mating them and outputting the results for each generation. In addition to reviewing classes, strings, and random number generation, this project requires students to design their own classes. It is particularly useful for students who need additional practice designing multiple, interacting classes.

Text ID

In this project students work either individually or in pairs to write a text identification class that uses the Naive Bayes Classifier to determine what author is likely to have written a given text. Students are required to design a class that compiles features from a given text, such as word lengths, sentence lengths, and distribution of word-stems. They then use these features in the Naive Bayes algorithm to classify texts. In addition to reviewing string manipulation, this project requires students to design and document a class. It is particularly useful for students who need additional practice with strings and class design.

Markov Text Generation!

In this assignment students work either individually or in pairs to implement Markov text generation. Students must prompt the user for files to use as a model and then parse the files to create a k-th order Markov model, represented as a map of key words to the k words that can follow those words. Students then generate a random text using this map. In addition reviewing strings, dictionaries, and file i/o, this assignment requires students to design their own algorithm given basic specifications.

Subscribe to Incorporate Student Choice