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

Meme Magic: Project in Sprints

Meme Magic is a series of six assignments intended to provide progressive exposure to programming in Java using a popular and recent concept: Memes. Memes utilize an image conveying a concept or feeling with a caption provided by the Meme author. The series of assignments, designed as sprints in the context of a larger project, begin with the design and scaffolding of Java classes needed to write a program to produce text-based Memes and end with a fully-functional graphical user interface. For a detailed list of learning goals, please see the Learning Goals section. In the first sprint, students depict the overall project structure of a text-based meme application using Unified Markup Language (UML) and write method stubs in Java. In each of the next two sprints, students implement half of the specified functionality and integrate those components to a fully working application. Students are asked to add Comparators to sort memes to their application in sprint 4 and to unit test all of their code using JUnit in sprint 5. In the final sprint, students extend the functionality once more to a graphical user interface to experience event-driven programming.

Micro:Vote: An Introduction to Python using the BBC micro:bit

The Micro:Vote project is designed as an introduction to text- based programming through a 12-week project aimed at 11 to 13 year olds. The project is designed as a School-University partnership whose aim is to highlight the role of creativity and social impact in computing through the design of digital voting posters using the BBC micro:bit and MicroPython.

Adopting a Design Studio approach, the project scaffolds students in the creation of a physical computing voting system and informative poster, to gather responses on an issue of social importance within the community. Through the lens of Human- Computer Interaction, students investigate the role of computing in activism and learn to implement data and control structures.

CS2 Graphical Photo Library Project

This project steps learners through a series of assignments that culminate into a photo viewer/archive tool. The assignments are designed to emulate a software development "sprint" in the Agile development process parlance. Each sprint consists of an assignment that builds off the code of the previous assignment, and is by itself a valuable piece of the overall end product.

Our aim is to give students the feeling and experience of working on a large project via a sequence of carefully-crafted homework assignments. This project helps students gain experience with Object Oriented Programming in Java, combined with software development techniques, commenting and documenting code for maintenance, unit testing with JUnit, exception handling, event-driven programming and use of pre-built Java Swing components. The project culminates in a fully-functional graphical user interface and leaves plenty of room for creative expression.

The project was designed and developed with a neutral position regarding gender, race, and other protected classes. We believe the end product has a universal appeal for users of technology and the potential software developers of tomorrow.

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.

Subscribe to Incorporate Student Choice