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

Usability Observations of Everyday Things

This assignment is designed for an introductory human-computer interaction course. Students identify usability issues in everyday things. For example, confusing light switches, street signs, mobile applications, gaming consoles, or microwave ovens. There are three learning objectives: 1) demonstrate the ability to notice the usability of everyday things, 2) correctly apply usability terms and concepts, and 3) design a solution that addresses an identified weakness.

Using Science Fiction Trailers to Teach Social Responses to Communication Technology and the Media Equation

This group discussion activity helps students to explore how people socially respond to communication technology by explaining and applying the Media Equation and the Computers are Social Actors (CASA) paradigm for the study of human-technology interaction. Students will learn how to evaluate and apply CASA to human-technology interaction by discussing agents and technologies portrayed in science fiction movie trailers containing examples of virtual agents with social characteristics.

Using Citizen Science as a Theme for a User-Centered Design Course

Teaching students how to design and evaluate technology user experiences should be centered around understanding real-world user needs. In this project, students focus on a particular domain, Citizen Science, to motivate their learning of user research, prototyping, and usability testing. Citizen Science projects study phenomena in nature and the environment, such as monitoring the spread of invasive plant species or water quality. Citizen Science projects depend on volunteers to collect and submit data from local environments. Citizen Science is a compelling context for user-centered design because it involves multiple stakeholder groups, various front-end technologies (e.g., web and mobile), and information architecture. This project is scoped for a user-centered design and usability testing course for undergraduate computer science students. The course learning objectives are to (1) use research and design methods to develop an understanding of technology stakeholders and (2) apply that knowledge to create and refine design artifacts.

Using Affect-Aware Computing as a Theme for a User-Centered Design Course

This user-centered design project invites students to conduct hands-on human-computer interaction research and design by exploring affect-aware technology. These technologies seek to account for users’ emotions, moods, and other affective phenomena in the user experience. Examples include emojis used while texting, social robots that model emotional responses, and emotionally-aware chatbots. This project is for a user-centered design and usability testing course offered to undergraduate computer science students. The course learning objectives are to use research and design methods to (1) build an empirical understanding of technology stakeholders and (2) apply that knowledge to design and evaluate an interactive prototype. By immersing themselves in the complex domain of affect-aware computing, students learn to apply user-centered design to emerging technologies. Students create and refine common user-centered design artifacts, including personas, interaction designs, and prototypes. The reader of this paper will obtain recommendations for structuring the user-centered design projectand a high-level understanding of affect-aware computing.

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.]

Subscribe to Incorporate Student Choice