Bounce! A game-based curriculum for introductory programming


Bounce! was the outcome of my attempt to make an introductory programming sequence with these properties:
- Fun: Student make a program they actually want to run and play with.
- Support: Students practice one concept at a time that is always within their ability.
- Rigor: Students learn real programming concepts and practice them enough for proficiency.
- Ownership: Students write almost all of the code, with no hidden functionality.
- Authenticity: The final product looks and feels like a production-quality app.
The outcome was a game-based curriculum, where students build Bounce!, based on a popular casual mobile game (Okay?), with 10M+ downloads.
Introductory Programming
This project is designed to teach programming basics (loops, variables, procedures, conditionals). While the game is complex, students write almost the whole thing, with only a small bit of instructor-written code to get them started and to handle the complex math of bouncing.

Bounce! uses the Snap! block-based programming language that lets students create expressive apps easily. Research suggests that blocks allow students to learn core programming concepts like iteration earlier, before they grapple with syntax.
Instructions

Bounce! contains 4 labs, teaching Iteration, Variables, Procedures and Conditionals. Each lab is broken up into manageable steps, with:
- Learning objective(s)
- A visual preview of the completed step
- Textual instructions
- Hints
- Pair programming or buddy programming reminders
Advanced students can complete bonus objectives at the end of each lesson.

Lab Instructions:
Classroom Impact
Bounce has been well-received in my introductory programming course, where it is supported by a flipped classroom model, allowing students to receive hands-on support during class. It prepares students to create their own open-ended programming project later in the semester.