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

Introduction to conditionals using Surrealism (Art of Surprise)

This is the third lab for computational art (CS1) using Processing where students write a program that creates an interactive sketch including a surrealist juxtaposition (i.e. the juxtaposition of two things that create a sense of surprise based on their presence in the same frame). The goals for this lab are:

  1. Practice writing an interactive Processing program
  2. Practice using conditionals in your program
  3. Practice testing where the mouse is clicked within an area of your scene
  4. Practice using variables to control appearance
  5. Make an interactive program that visually changes when a mouse is clicked in a certain area
  6. Learn about surrealism
Engagement Excellence

Blexbolex Style Exploring Scaling via Variables

This is the second lab for computational art (CS1) using Processing where students write a program that creates a scene that explores composition to convey story or mood.  The goals for this lab are:

  1. Use a variable to control scale and position of a sketch component
  2. Alter and explore the role of scale in a sketch’s composition
  3. Practice using transforms (translate and scale) in a sketch to control scale of a portion of your design
  4. Apply your knowledge of the 2D coordinate system in order to appropriately scale and translate a portion of your design
  5. Study the composition and coloring used by the artist, Blexbolex
  6. Copying composition and color to practice design 

Expressionist Animal Creation

First lab for computational art (CS1) using Processing where students write a program that creates a presentation of a creature in an expressionist style. The goals for this lab are:

  1. Understand the Processing 2D coordinate systems
  2. Practice creating shapes in Processing
  3. Understand draw order and command ordering
  4. Practicing using Processing
  5. Learn about expressionism
  6. Make a picture of a creature in an expressionist style 
Engagement Excellence

2_Poets: Reading Poetry Backwards – RPB v1.0

This programming assignment requires students to study, understand, and augment a Python program that (re)writes or “breaks” poems in various “deformed” manners, including printing the lines of a poem in reverse (last line to first line) and with randomized lines. Emily Dickinson wrote in the margins of a book: 'Did you ever read one of her Poems backward, because the plunge from the front overturned you?’ Learning goals include problem decomposition (functions), extending existing code, problem solving with multiple solutions, and building an app to handle a wide range of input texts.

The author of this material was awarded a 2016 NCWIT Engagement Excellence Award for this assignment. Learn more on NCWIT's awards page.

Engagement Excellence

2_DNA: Chargaff’s Numbers

This is the second of five programming assignments in a semester-long CS-1-like course named DNA to introduce students to programming within the context of genomics. This programming assignment requests a Python program to open and read a FASTA-formatted file filled with DNA and print a neat summary of Chargaff’s numbers, defined as: the number/proportion/percentage of A, C, G, T nucleotides in the file of DNA. Students are required to research and download the genome of an entire microbe of their choice. In addition to submitting source code, students must practice their scientific writing in a report of their program as applied to an entire microbial genome of their choice. The report must include the sections of Introduction, Methods, Results, and Discussion.

Wrapper classes

In this tutorial, students create a program in Java that utilizes wrapper classes. The program must include three ArrayLists (one of type Integer, type Double, and type Character) and it needs to parse values from the ArrayList.

Exam review: classes, methods, etc.

In this tutorial, students create a program in Java that covers methods, conditionals, and object-oriented programming. The activity requires students to use the Problem.java file to practice creating an interactive program that accepts user input and then performs some action on that entry. Then, the students must modify methods (such as answerCorrect) to evaluate the user's overall performance for answering questions correcting on the quiz/interactive program.

More about loops: "while" loops

In this tutorial, students create a program in Java that uses a while loop. The program must accept user input and then evaluate whether or not the value entered by the user is too high or too low. The program must continue to loop until the user enters the correct value.

Loops: "for"-loops

In this tutorial, students create a program in Java that utilizes the 'for' loop. The program must execute a series of actions, such as finding the product of all integers from 1 to 25, print the average grade for five (5) grade value (from 0 to 4) entries, and one additional loop application (as chosen by the student).

Classes and constructors

In this tutorial, students create a program that implements a class. Using Java, students must edit existing files (included) to create new variables, assign new values, and construct new objects.

Subscribe to Incorporate Student Choice