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

Fitness Tracking Lab

In this lab, students track their own fitness activities for a week. They submit this data which becomes some of the test data for the lab. Based on the students' activities, the program computes the number of equivalent miles each student has walked and the total number of miles walked by everyone together. Output is sorted from most miles walked to least miles walked. 

This is a lab for late in the semester of a CS 1 course. It requires students to use text files and an array of structures.

Learning objectives:

  • Compiling, linking, executing a program
  • Developing an algorithm
  • Testing a program
  • Using the C++ syntax and programming constructs of standard I/O, variables and arithmetic expressions, selection statements, structures, arrays

Prerequisite knowledge: Students must have already been exposed to standard I/O, variables, arithmetic statements, selection statements, loops, functions, arrays, structures, and text files.

The lab could be easily modified to use a class instead of a structure and an array of objects.

Wallpaper Tessellation Creator

In this assignment, students will create geometric tilings in Python. Students work to draw tessellations whose specifications are provided, and have the opportunity to design their own. Students practice problem decomposition to build logic that draws a single element, a row of elements and finally a plane tiled with rows.

This assignment is essentially Robert Muller's "Problem Set 2: Tessellation" assignment, available in the EngageCSedu repository. We scaffold that material and add additional resources: (i) background materials are provided to help students with the geometry of the four mandatory elements to be tiled (squares, rings, hexagons, octagons); (ii) the assignment flow starts with simple shapes before moving to complex ones; (iii) a template is provided that gives function specifications, scaffolding the decomposition; (iv) test cases are given that allow students to check the correctness of their individual functions as they build them; and (iv) a potential grading rubric is provided.

CPE123 (CS1) Syllabus

This course is one version of Cal Poly's CPE123, an introductory course targeting incoming freshmen. All sections of CPE123 have the goal of engaging students in "demonstrating the relevance of computing to the world around them" by challenging "students with creative, constructivist challenges that are relevant to their own lives.” It assumes no prior experience in computer science.

In this version of CPE123, computational art is used as a means for exploring beginning computer programming, logic and math. The course uses Processing, an open source programming language and IDE built on the Java programming language.

“The hidden agenda of the class is to make you fall in love with the ability to translate thoughts into reality—also known as computer science.” - J. Clements

[Unlike other collection items, syllabi are not peer reviewed.]

CPTS111 (CS1) Syllabus

This is the first CS class for non majors and majors alike. No prior programming knowledge is required, and there are no prerequisites. This course introduces concepts such as how to solve problems by designing and implementing algorithms in Python. Specific programming concepts include: arithmetic, conditionals, iteration, functions, file IO, lists, and dictionaries. Upon successful completion of the course students should have gained the following skills and proficiencies: 

Computational Creativity Exercise (CCE): Marble Maze I

In this assignment students work as a team to build, using only specified materials, a structure through which a marble will travel,  Students first work independently developing their own segment of the structure and then work collaboratively to construct a final structure. Students are required to video tape the execution of a marble traveling through the structure lasting at least n seconds. This exercise will allow students to practice problem decomposition, abstraction, generalization, and evaluation, and also debugging and testing.

This exercise was developed as part of the NSF-funded Computational Creativity project at the University of Nebraska-Lincoln.

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

Matching Game, a CS1 Project

In this project, students build a matching game in order to gain experience and proficiency with loops, control flow, two-dimensional arrays, writing functions from their specifications and making simple graphical interfaces. In addition, students will learn how to manipulate game state to represent a game board, use randomness to vary the game state, change game state in response to user clicks, and draw a graphical representation of that game state.

Computational Creativity Exercise (CCE): Storytelling

In this assignment students work as a team to develop chapters of a story where the first and last sentence of the chapter is prescribed. Students first work independently developing their own chapter and then work collaboratively to identify and resolve logical inconsistencies in the chapters in order to produce a final coherent story.  This exercise will allow students to practice problem decomposition, abstraction, and evaluation, and also debugging and testing.

This exercise was developed as part of the NSF-funded Computational Creativity project at the University of Nebraska-Lincoln.

Engagement Excellence

Computational Creativity Exercise (CCE): Everyday Object

Students will be required to clearly describe the functions of an ordinary object they may use daily, as if they were the inventor of the object. This exercise will allow students to practice problem decomposition, abstraction, algorithmic thinking, and evaluation; as well as, modular programming and encapsulation. To encourage practice, this exercise fosters creativity; asking students to look at the objects in new ways, such as examining the object’s environment and considering its usage. Students work together to develop teamwork skills.

This exercise was developed as part of the NSF-funded Computational Creativity project at the University of Nebraska-Lincoln.

Voters Lab

This lab involves students coming up with a poll on a subject in which they are interested; administering the poll to students, faculty and staff on campus; and writing a program to calculate and manipulate poll results. The example provided uses a poll based upon the 2016 US presidential election, although any poll data will do. One goal of this lab is for students to learn how to use arrays of structures. Another is for students to create a program that uses most of the concepts covered in CS1 as a culminating project. Students may work individually or in pairs.

Subscribe to Incorporate Student Choice