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

CS1510 (CS1) Syllabus

This is the first introductory computer science course at the University of Northern Iowa. It is a semester-long course with three one-hour classroom lectures and a two-hour interactive lab per week. It is required for computer science majors but non-majors also take the course. No prior programming experience is expected, but the class is designed to be engaging to those with and without programming experience. While a major goal of the course is to provide a good start to the development of programming skills (using Python), the course is not solely about programming.  

Upon successful completion of the course students should have gained the following skills and proficiencies: general computer and operating system usage, computer operation, a mental model of how programs are executed, machine capabilities and functions, general program design, standard approaches to common (simple) programming tasks, abstraction (data , procedural, thinking), data and problem representation, and elementary data structures.

Minecraft Drawing

In this assignment, students use Python functions to create two or more types of Minecraft tiles. Examples of a drawing as well as a summary of Turtle methods are provided for guidance. In addition, past submissions are provided for inspiration.

Video CV

In this lab (typically the first, or an induction session for a CS1 course), students work either individually or in pairs to create a one-minute video CV using equipment and software of their choosing. To start, students are simply told that a Computing major can lead to a number of career options, and they are encouraged to think and discuss "cool" or desired jobs. Students are then asked to create a video where they introduce themselves, talk about their experience and think about how their course will lead them to their desired job in the field. It is important to note that the videos are not made publically available, and are kept for staff use only.

Image Processing (Warhol Pop Art Filter)

This is the eighth lab for computational art (CS1) using Processing where students practice creating an Andy Warhol silkscreen image filter. The goals for this lab are:

  1. Practice creating an Andy Warhol silkscreen image filter
  2. Practice using images in Processing
  3. Practice manipulating pixels of an image
  4. Practice using arrays and writing for loops
  5. Practice indexing a 1D ray with 2D coordinates
  6. Practice using boolean logic to control which parts of an image are modified (including implicit circles) 
Engagement Excellence

Animating Multiple Elements with Arrays

This is lab for computational art (CS1) using Processing where students create a program that animates multiple characters in a scene using loops and arrays.

The goals for this lab are:

  1. Practice writing methods
  2. Practice writing loops
  3. Practice using an array data structure
  4. Practice using animation variables
  5. Practice using arrays

Image Processing: Interactive Self-portrait

This is the third project for computational art (CS1) using Processing where students create a self portrait using a digital image of themselves as the starting point. In this project, students learn about 2D to 1D array mapping and indexing as well as practice using loops via the plotting of a shape using a parametric equation. The objectives for this project are:

Art Nouveau Curves and Generative Elements

In this assignment students create an art nouveau style sketch using Processing which includes both animated curved elements and repeated ’tile’ like aspects. This is the second project for computational art (CS1) using Processing. The objectives for this project are:

  1. Practice using a loop to control structure to generate patterns/scenes
  2. Use functions to re-draw parts of a scene
  3. Use random to produce desirable colors and design layout
  4. Use structured layout
  5. Use parametric curves to control curved patterns in a sketch
  6. Apply repetition of drawing certain elements in a sketch
Engagement Excellence

Animated and Remixed Blexbolex

In this project, students merge their lab 2 code and add animation to explore the use of variables (and explore the process of merging two code bases together). The objectives for this project are:

  1. Practice using Processing
  2. Practice using simple primitives and shapes in Processing
  3. Practice using methods to encapsulate parts of your code for re-use
  4. Practice integrating two student’s code
  5. Practice scaling and translating shapes into a single coordinate frame
  6. Practice animating via transforms and variables
  7. Practice developing your aesthetic
  8. Make an interesting ‘story’ combining two existing designs and adding animation

Impressionism and Implicit Functions (Looping 2D Space)

This is the sixth lab in a course on computational art (CS1) using Processing (https://processing.org/overview/). In this lab, students write a program that creates an image using an implicit representation of geometry that is drawn using shapes to emulate paint strokes.

In this lab, students will:

  1. Practice using a loop control structure to create an image made of strokes based on implicit lines.
  2. Practice using implicit lines and implicit circles, and the distances from these equations, to create a scene or object.
  3. Create new stroke styles using patterns of points, lines, and ellipses that model the textures seen in many impressionist paintings.
  4. Practice translating mathematical functions into code. 
Engagement Excellence

Generative Art Using Loops

This is the fourth lab for computational art (CS1) where students write a program that creates two different images using Processing each of which are generated by an algorithm when the program is run. Each of the two different images must use repetition (that is, some visual elements that are repeated, but that may be slightly different) using loops and a function to draw the repeated element. The goals for this lab are:

  1. Practice using a loop control structure to generate patterns/scenes
  2. Practice using functions to re-draw parts of a scene
  3. Practice using random to produce desirable colors and design layout
  4. Practice using structured layout in 2D space
  5. Consider the role of repetition in art
Engagement Excellence
Subscribe to Incorporate Student Choice