BJC Sparks

Middle School / Early High School Curriculum

Try the Curriculum

BJC Sparks Inspiration and History

The Beauty and Joy of Computing (BJC) is a university-level non-majors course developed and taught at UC Berkeley by Dan Garcia and Brian Harvey. It is endorsed by the College Board as a high school Advanced Placement (AP) CS Principles (CSP) curriculum whose guiding philosophy is to meet students where they are, but not to leave them there. It covers the big ideas and computational thinking practices required in the AP CSP curriculum framework and powerful computer science ideas like recursion and higher-order functions. The programming part of the course uses Snap!, an easy-to-learn blocks-based programming language based on Scratch. Through the course, students learn to create beautiful images, and realize that code itself can be beautiful. Having fun is an explicit course goal. We take a “lab-centric” approach, and much of the learning occurs through guided programming labs that ask students to explore and play.

We recognized the opportunity to bring a reduced and simplified version of the curriculum to middle school and early high school that teaches a functional approach to programming, emphasizing the flow of information through functions — rather than emphasizing iteration and commands — and including exciting projects in graphics, data, and media. We use a lab-centric paradigm, delivered as a series of “HomeFun” (not “HomeWORK”) programming challenges. We created and piloted two of the units in the 2018-2019 academic year with ten students in grades 4-8. In Summer 2022, we offered a week-long, virtual workshop for teachers, administrators, and parents or community members running extra-curricular activities who started alpha testing curriculum in the 2021-2022 academic year.

Design Principles


Our top priority is to create a fun curriculum in which students develop programming projects and explore social implications of computing related to their own interests. We believe it’s important for students to have agency in what they create and in developing their ethical approaches to challenging issues. We want to build a curriculum with ample opportunity for creativity so that students are so passionate about their work that they naturally want to share it with their friends!


We seek to support all students by providing open-ended creative projects that allow individuals to bring their own interests, cultures, and life experiences into the classroom. We aim to provide a structure through the selected CS content that allows students to discover how taking an active role in technology is relevant to their lives.

Supportive (of Teachers)

Teachers are critical to implementation, and our curriculum will provide a companion teacher guide for each unit of study. This will include an overview of the student content, teaching tips, pacing suggestions, formative and summative assessment items, example solutions, and correlations to the CSTA standards. Throughout our multi-year development process, we will seek early and frequent feedback from teachers on the student-facing materials, the teacher guide, and what more is needed to best support classroom activities.

Computational Problem Solving

Through our open-ended programming activities and meaningful investigations of the social implications of computing innovations, we encourage students to see that there are multiple ways to solve a problem and to develop the habit of evaluating potential solutions by considering aspects such as code-readability and impacts across social groups, and to society. We support students in developing a range of debugging skills as they learn to see programming as both a technical and a creative act, and we encourage them to seek ideas and feedback directly from intended users of their technology.

Powerful CS Ideas

Lastly, we believe in a functional-programming-first approach to teaching computer science and so begin the curriculum with a focus on functions and immutable data. Once this foundation has been established, students are introduced to iteration, variables, events, and hardware. Our curriculum is being developed to meet the CSTA standards for middle school and some of the early high school standards. We believe kids are capable of mastering (traditionally) difficult concepts if the scaffolding and context is done right; Seymour Papert’s idea of “Hard Fun”!

Curriculum Overview

Unit 1 - Functions and Data

This unit starts with the basics of functional programming—creating abstractions in the form of reporters (i.e., functions) and predicates (i.e., functions that return Booleans) through control structures, to using the higher-order functions map, keep, and combine. Students explore the Snap! programing environment using functions to process inputs, which may themselves be the outputs of other functions. After learning the basics of working in Snap!, students create projects with using lists, sounds, and other common data types (numbers, text, emojis, etc.) as they learn the basics of bits, characters, and how functions behave.

Unit 2 - Sequencing and Iteration

This unit moves beyond the functional programming paradigm to introduce commands, sequencing, and iteration. Students continue to develop their skills with selection, lists, and higher order functions as they learn when and how to use variables, control structures, logical operators, and nested lists through projects such as a movie recommender, a song player, and a first exploration of machine learning.

Unit 3 - Hardware

This unit extends student work with sequencing and iteration into the realm of physical computing using the micro:bit controller. Students use craft materials to build a toy and game; use e-textile materials (e.g., conductive thread, LEDs, and sensors) to create circuits; use neopixels to program creations to change colors, twinkle, and pulse; and program micro:bits to send and receive messages. The unit culminates with building collaborative chain reaction (Rube Goldberg) machines.

Who is behind BJC Sparks?

Dan Garcia, Teaching Professor at the University of California, Berkeley, and a small team of BJC veterans — Mary Fries, Pamela Fox, Michael Ball, Lauren Mock, Brian Harvey, Talia Ye, and BJC TAs and Lead Teachers. This work is funded with generous support by the Hopper Dean Foundation.

PD Workshops

We offer PD workshops for BJC Sparks during the summer. Please view our PD Page for more information.


If you have questions about BJC Sparks, please email us at