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

Functioning in Python

In this lab students work independently or collaboratively to develop a deeper understanding of using pre-defined and building custom functions within Python. Through the implementation and analysis of six functions, students practice creating docstrings to describe both the functionality of each function and the inputs associated with each function. Each function illustrates a particular core feature within Python (such as performing calculations, interpolating values, executing checksums). This lab is particularly useful for students with little experience writing functions and for those interested in more practice using pre-defined functions.

Millisoft "Shapes" Revisited

In this assignment students update an existing graphics class. Students must add methods to translate, rotate, scale, and flip arbitrary shapes using turtle graphics. They then use this class and additional subclasses to draw an image of their choice. In addition to reviewing graphics, this assignment requires students to work with a class hierarchy. It is particularly useful for students who need additional practice with classes.

Exceptional Encryption

In this assignment students work either individually or in pairs to implement and crack a simple version of RSA. As subproblems in generating RSA keys, students must generate random primes, calculate Euler's totient, and find the greatest common divisor of two numbers using Euclid's algorithm. They must then encrypt/decrypt messages using these keys and use brute force as an attack against encryption. In addition to reviewing brute force and recursive algorithms, this assignment requires students to write a program with multiple helper functions.

Huffman Compression

In this assignment students work either individually or in pairs to implement the Huffman Compression. Before beginning to code, students must write a software design document that plans the functions that they will use. The program itself must prompt the user for a file and then compress the file using Huffman Compression. In addition to reviewing trees and dictionaries, this assignment requires students to carefully design and test their code. It is particularly useful for students who are new to trees and need additional practice designing large programs that involve more complex data structures.

Secret Sharing and Lagrange Steganography

In this assignment students implement a basic security protocol in which a key is distributed to multiple parties such that a certain number of parties must combine their knowledge to learn the full key. In addition, this assignment reviews the concepts of random number generation and floating point numbers, as well as requiring students to design their own decomposition. It is particularly useful for students who need practice decomposing problems.

Engagement Excellence

Mastermind!

In this assignment students work either individually or in pairs to implement the game Mastermind. Mastermind is a game in which the player has to guess a sequence of randomly chosen colors based on feedback about their previous guess. Students must program the game from the ground up, creating their own decomposition design, as well as error checking user input. This assignment requires students to think carefully about design, documentation, and debugging. It is particularly useful for students who need practice writing larger programs.

The authors of this material were awarded a 2015 NCWIT Engagement Excellence Award for this assignment. Learn more on NCWIT's awards page.

Engagement Excellence

Alien Robots!

In this lab students work either individually or in pairs to create a game of their choosing using the VPython library. To start, students are given a basic program that shows a simple alien with limited control from the user. Students are required to make incremental changes to this program, adding more complex graphics and controls to make a more interesting game. This lab reviews classes and graphics, as well as requiring students to think about the control flow for their game. It is particularly useful for students who are new to classes and need additional practice designing classes, as well as writing methods and debugging code.

The authors of this material were awarded a 2015 NCWIT Engagement Excellence Award for this assignment. Learn more on NCWIT's awards page.

Engagement Excellence

Creating the Mandelbrot Set

In this lab students work either in pairs or individually to write a program that displays the Mandelbrot set. Students incrementally write functions that help them deal with nested loops, complex numbers, and graphics until they have a program that can display and zoom in/out of the Mandelbrot set. There are optional parts to the assignment that deal with visualizing escape velocities and "Mandelbrotifying" an image. In addition to reviewing nested loops and graphics, this lab requires students to use constants and use incremental design. It is particularly useful for students who need additional practice with nested loops.

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
Subscribe to Incorporate Student Choice