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

If-statements; trivia questions

In this tutorial, students create a quiz. Using conditional statements (if) in Java, students must create a program that accepts user input, evaluates the entry against a specific value, and prints an appropriate output response.

Random numbers

In this tutorial, students create a random number generator. Using Java, students must create a program that prints a random integer, prints the value of a coin toss (H or T), prints a value from a discrete set of float/double values, prints a random lower-case letter, and two additional problems (as identified by the student).

Reading in words; "silly sentences"

In this tutorial, students create an interactive program. Using the Scanner class in Java, students must write a program that accepts user input and then displays a subsequent output.

Fantasy Game

In this activity, students build a simple graphical display for a role-playing game where a map with different terrain types is displayed on a screen, with small images for each character displayed over certain elements of the grid. Students are instructed to use constants for numbers, and are given opportunities to make new terrains and add extra customization features.

Talking to Your Silicon Friend

In this lab, students work through an introductory problem to have a simple conversation with a computer program they have written. The computer prints a greeting message, and then asks the user five questions, and responds in an appropriate manner. This activity is good to get students familiarized with simple i/o.

Pretty Pictures

In this lab, students use a canvas provided to them to draw an image of their choice. The images students draw must satisfy certain basic requirements, to contain certain shapes, text, images, and custom colors.

Competitive Pig Game

In this activity, students build the game "Pig", and implement a computer player for the game. There are two rounds, where the human plays first in round 1 and the computer plays first in round 2, in order to eliminate any advantage.

Tessellation, Problem Set 2

In this assignment, students will be creating mosaics in Python. Students will work to generate tessellations, such as Ring and Hex. Functions must be composed to generate the various images.

Engagement Excellence

What's Simple Is True

In this project, students build a Java interpreter for a limited version of BASIC called Facile. The interpreter manages variables, mathematical operations, conditional statements, functional decomposition, and its own call-stack. As part of the activity students test the interpreter with JUnit. This project is for students that would like to explore building an interpreter, or for students that may have an interest in the general workings of compilers and programming languages on a smaller scale.

Subscribe to Incorporate Student Choice