Moved from U1 topic page --MF, 6/12/20

Throughout the unit, students learn to "package" a script by building a custom block (procedure) and how to add input parameters. This is the beginning of a yearlong focus on abstraction. The unit also introduces the design elements of the curriculum itself: Green boxes ("For You To Do") are for exercises; orange boxes are important text that even text-skippers should read; yellow boxes are for text that students can safely skip, but that point to side paths or reinforce the main points. Blue boxes ("If There Is Time") are additional exercises that are useful, not simply redundant, but that can be skipped without leaving students unprepared for later pages. It's up to you to decide which of these to assign to the class. Purple boxes ("Take It Further") are differentiated learning for the fastest and most interested students; our intention is that they be self-assigned, not assigned by you to the entire class. They have little handholding and can take quite a long time. Encourage individual students to do them at home. The pink boxes at the top of lab pages give very short overviews, for students, of the plan of the entire lab and of the individual page. Don't dwell on these, but certain students' learning styles will benefit from advance notice of what they're working toward on a page. Grey boxes (we chose the neutral color deliberately as a subtle hint that these aren't part of the beauty and joy we strive for elsewhere) are for AP exam vocabulary words. Encourage students not to spend time reading them in class, but to come back to them for vocabulary review. Please resist any temptation to make a big fuss about vocabulary.

Encourage students to experiment with Snap!: playing with inputs, trying out blocks before they have been formally introduced, and modifying and extending the assigned tasks. Creativity is a Big Idea of AP CS Principles and a core element of BJC.

Introduction to Teacher Guide

Teacher Guide home

Welcome to the Teacher Guide for the Beauty and Joy of Computing (BJC) AP Computer Science Principles (CSP) course. This guide is designed to support high school CSP teachers with timing and activities for the BJC student materials. We start this guide by presenting our three goals: including student groups typically underrepresented in computing, preparing students to pass the AP CS Principles exam, and conveying the beauty and joy that we see in computer science.

Goals: Equity and Inclusion

A primary goal of the BJC curriculum is to attract new students, especially those traditionally underrepresented in computer science, to the joys and life opportunities that come with programming and CS through rigorous, accessible, and enjoyable content. BJC aims to foster the engagement of diverse students through project-based learning activities, opportunities for personalization, and discussions of the social implications of computing.

Computer Scientists @ Work curriculum elements are designed to support students' sense of belonging by representing diverse individuals in the field. Each box highlights a different individual and their contribution to computer science and includes an additional link where students can learn more about the individual and their work. This curriculum feature also serves to educate all students about the contributions of diverse individuals and some of the challenges these individuals have faced.

Resources for Recruiting Female and Underrepresented Minority Students from the College Board

AP CSP "Big Ideas":

CRD: Creative Development
DAT: Data
AAP: Algorithms and Programming
CSN: Computing Systems and Networks
IOC: Impact of Computing

AP CSP "Computational Thinking Practices":

1 Computational Solution Design
2 Algorithms and Program Development
3 Abstraction in Program Development
4 Code Analysis
5 Computing Innovations
6 Responsible Computing

Goals: AP Computer Science Principles

Several curricula satisfy the framework for the new (starting 2020-2021) AP CS Principles exam. BJC is one. Most AP courses have specific curricula taught in similar ways at every high school where they are offered. CS Principles is different because it is equivalent to a college breadth course rather than a first course for CS majors, and there is no uniformity in how colleges teach such a course. In particular, the exam is meant to be "language agnostic," meaning that any programming language can be used in the AP CSP course.

Like BJC, CSP's specific goal is to attract students in groups that are historically underrepresented in computer science. BJC is an AP curriculum for tactical reasons: it's much easier to get high schools across the country to introduce an AP course than a non-AP course. But keep in mind that the goal is to attract students who may not view themselves as "AP kids."

Brian, I had a little trouble understanding the previous paragraph and with it's tone, and I made some edits to improve clarity and the impression it makes. Please ensure that I haven't disrupted your intended meaning, and then remove this comment. --MF, 11/17/19

The College Board CSP Framework sets minimum standards for each of the "Big Ideas" and "Computational Thinking Practices" listed to the right, but each curriculum has its own emphasis. BJC puts a heavy emphasis on Algorithms and Programming and the Impact of Computing. As an AP-endorsed curriculum, we cover every detail of the Framework, but no CSP curriculum follows the order of topics listed in the Framework. Instead, many Framework topics are spread throughout BJC. In this Teacher Guide, there is a teacher page for each student lab, and the last thing on each teacher page is a list of which Skills of the Computational Thinking Practices, Learning Objectives, and Essential Knowledge are found in that lab. A description of how each unit addresses the Big Ideas and the Skills of the Computational Thinking Practices is included on the Teacher Guide page for each of the first five units (Unit 1, Unit 2, Unit 3, Practice Create Task, Unit 4, Unit 5). Please note that the BJC Teacher Guide should be considered a support and that the official AP CSP Curriculum Framework is the definitive source of information about the standards, performance tasks, exam, and requirements of the course.

In the previous paragraph, I updated the names of what BJC weights heavily to match the new framework, refined (and generalized to all providers) the language about the order of topics in the Framework, and added a disclaimer. --MF, 11/17/19

Goals: Beauty and Joy

In addition to the AP goals and curriculum framework, BJC has one more goal: for students to come away loving programming and wanting to do more of it. This doesn't mean they all have to be professional programmers or computer science majors. But everyone on the BJC team has had the experience of learning to love programming. As teachers, we've seen kids who hate school turned around by discovering programming.

Most of us started by seeing computer programs as a means to an end. Our focus was on the result of running the program, rather than on the program itself. We came to see programs as potentially beautiful in themselves when we learned the technique of recursion, in which a procedure calls itself as a subprocedure. So, starting right in Unit 1, we sneak simple examples of recursion into the labs. We don't make a fuss about them, and it's not until Unit 7 (after the AP exam) that we make a serious formal presentation of the idea.

"Beauty and Joy" isn't just poetry. We want the class to be a joyous experience for students. We want to make it hard for any student to feel like a failure. So we offer built-in differentiated instruction, in the form of "hints" that are not shown initially, but with a link that a student can choose to click in order to get a more scaffolded activity. (As always, in a heterogeneous class, we don't want to limit the activities to what the weakest student needs; we think most students will prefer to skip the hints once they see that they can do the work without them. Also, we have multiple-choice review questions, often mirroring the kind of question they'll see on the AP exam, but in our questions, if a student gives an incorrect answer they get a response with a hint about why that answer can't work, and they can try again as often as they need until they get it right.

Please help us achieve this goal: Do not mingle assessment activities with learning activities! At the end of each unit, we provide assessment activities. If you can't stand waiting a month to assess students, make Friday quiz day. But don't grade the labs, and don't give daily quizzes. The learning should be low-pressure; it's hard to learn when you're afraid.

A Typical BJC Class Day

First five minutes: Computing in the News. You or a student read one or two stories from today's paper about computing in society. No discussion.

Rest of class: Students work on the lab. You go around the room helping individuals.

Bell rings: Nobody wants to leave. But you sadly remind them that other students are waiting to use the room.


Teaching any curriculum for the first time takes a lot more time and effort than repeated teaching of the same curriculum. Unanticipated events (snow-days, absences, school issues) can also interfere with any teacher's schedule.

To help you make decisions when pacing gets difficult, the Teacher Guide marks some pages with an asterisk. While all of the BJC pages (except for "Optional Projects" at the end of each unit) are part of the essence of BJC (all part of learning the beauty, the joy, and the computing) if you must adjust your schedule, these are the pages that are safe to skip (safe, in that students will still be able to do later pages and will still be safe for the AP).

Units 1 through 5 cover the basic AP content and therefore must be finished before the AP exam. Units 6-8 expand on some of the beautiful and powerful ideas of computer science that are rarely if ever seen in other AP CSP courses.

Please do not stand in front of the room talking! Teachers, especially good teachers, feel that they're not doing their job if they don't make handouts and lecture slides for each class meeting. In BJC, the curriculum itself does that kind of teaching. Your job is to walk around the room, look over shoulders, and get kids unstuck, preferably by asking questions rather than by suggesting code. Every minute you spend in front of the room is a minute in which the class isn't learning the curriculum. This is one of the main reasons teachers have trouble completing the year of materials on time.

Experience before formality: In particular, please do not try to explain a key idea of a lab page in the abstract, before the class has had the experience of working with the idea. In our pedagogy, such abstract presentations come after the activities that give rise to the need for an idea. (This is the pedagogic equivalent to the key computer science idea of abstraction!)

Student Materials:

All of the required materials for this curriculum are available online at no cost. There are the labs (at and the textbook (at Any computer that runs a modern browser (not Internet Explorer; Edge is fine) is fine.

Brian, you kept this commented out HTML for a reason, I assume. Are you planning to come back for it? --MF, 5/23/20

Computer Scientists @ Work

photo of Luis von Ahn
Image from Wikimedia user EneasMx

Luis von Ahn (born in 1978), one of the pioneers of crowdsourcing, is a Guatemalan computer scientist and entrepreneur. If you've ever had to click a box or identify images to confirm you are not a robot, you've used technology based on the work of Ahn's digital security company reCAPTCHA. reCAPTCHA protects websites from fraud and abuse with minimal disruption to user experience. After selling reCAPTCHA to Google in 2009, he co-founded the popular language learning platform Duolingo, which as of 2020 had over 500 million learners across 39 languages.

Article: 'I Just Want to Have an Impact'

Computer Scientists @ Work boxes feature diverse individuals and their contributions to computer science. The example to the right is from Unit 4 Lab 2 Page 4, "Who Cares About Encryption?"

In the Classroom

As students work through the curriculum, they will come across and read the text in the Computer Scientists @ Work boxes naturally, and you don’t necessarily have to do anything specific to support them. Should you wish to encourage students to engage further with the text and additional links, here are some options:

There are also many ways to use these features as part of a project, lesson, or lesson sequence. Keep in mind that these activities, much like the Optional Projects at the end of each unit, will take one or more class periods, and should only be used if you're on pace to complete the course content. Here are three options:

  1. Writing Your Own Bio. Students read and summarize three Computer Scientists @ Work bios of their choice. Then, they write their own bio either as a current computer science student or as themselves using computer science in their future career. Students then share their bios with their classmates.
  2. Storytelling in Snap! Students choose one individual’s story that resonates with them. They do some additional research on the individual and their journey in computer science. Then, students use Snap! to tell the story of the individual, capturing at least three major life events as well as their overall contribution to the field of computer science. Teachers can add additional stipulations to the development of the student’s program to meet key learning objectives of the unit students are currently completing (e.g., use of a list or a custom block).
  3. Other Computer Scientists @ Work. Students read a few of the Computer Scientists @ Work boxes for inspiration. Then, they find a computer scientist not already represented in BJC to research on their own. Students are encouraged to find someone whose identity they connect with, who is from a similar background, or who is working on something they are interested in. Students research their chosen person and write a bio for them to share with the class. Alternatively, students could make a poster which could be used to decorate the classroom or a bulletin board.

Connecting with Local Computer Scientists

Another way to support students in seeing themselves as computer scientists is to invite speakers from a local company and/or college into your classroom. This can be done virtually or in person depending on your location and your school and district policy around classroom visitors. Consider doing some research on the comapny/insitution first and, if possible, identify a specific individual to reach out to (e.g., someone doing interesting work or of a background students can connect with) instead of reaching out to the company at large. Below is an email template you can use.

Subject line: Speakers Wanted for High School Computer Science Class
I hope this message finds you well.
[name of school] is looking for local technology experts to speak to students in our computer science class. We’re hoping that this would be an opportunity for students to learn more about local companies and opportunities in CS as well as to help students see themselves in a computer science role in the future.
Our computer science class consists of [number of students] and meets [regular schedule]. We anticipate that presentations will last about 30 minutes and provide an overview of what the presenter’s current role is as well as a bit about their career trajectory. Afterwards, we’ll budget about 15 minutes for Q&A. However, the format is flexible.
Please let me know if you are interested in presenting.
Thank you for taking the time to consider, and I very much look forward to hearing from you soon.

If the visit goes well, maintain the relationship in hopes of having them speak again in the future.

Design Elements

The BJC student materials have several design elements that are visually distinguished by color, each to serve a specific purpose:

Yellow boxes contain additional information for optional reading.
  1. Students should Work with a Partner
  2. As much as possible, every pair should complete all For You To Do problems.
    • If some problems are too much for your students, please provide feedback to the developers using the blue feedback button in the lower right corner of every page of this Teachers' Guide.
    • The teacher guide suggests places where, if time is tight, you can skip problems.
Click this link to learn about hint boxes.
  • As a form of differentiated learning, we sometimes provide extra scaffolding for an exercise in the form of a "hint" that we expect most students not to need. Encourage students to do their best to solve a problem on their own first.
  • Read More We also use this click-to-open mechanism, sometimes marked with the book icon, for extra information that's interesting but a digression from the activity. Students who read quickly will get a deeper understanding by clicking those links.
: Driver and Navigator

In pair programming, the driver is the one with hands on the keyboard and mouse; the navigator is the one reading the lab instructions and suggesting what the driver should do next.

Vocabulary boxes are used both for words that are important in BJC itself and for words that are important in the CS Principles Framework. If there's a conflict, the box will explain that.

Please don't have vocabulary quizzes! Students should have plenty of exposure to the vocabulary words in the labs themselves. Vocabulary quizzes are the paradigmatic not-joyous school activity.

These boxes are for things that students need only for the AP exam. This includes the pseudo-programming-language notation in which the College Board presents programming problems, and occasionally AP vocabulary that downright contradicts what we think and say. (Don't worry; there aren't many of those.)

Both kinds of gray boxes are things students can skip in the heat of doing the lab and come back to later for review. It's up to you whether you want to encourage that, or instead to encourage them to stop what they're doing and write down the vocabulary words in their notebooks.

Alphie: These are scripts for short skits that model some aspect of computational thinking.
Betsy: You can have students read them out loud, if most of the class is in the same place in the lab at the same time.
Students should act out the italic stage directions instead of reading them out loud. (Or an audience member can narrate as they act it out.)
Gamal: Mix it up! Students can read these dialogues in small groups or in front of the class (maybe even have two groups read in turn to increase retention), or teachers can assign them as a homework assignment and have students record a video or podcast of their reading.
Encourage participation, of course, but also be sensitive to students who, for one reason or another, are too anxious at first to present in front of others.
These orange boxes highlight important information and ways of thinking.

The following two boxes have hidden information. Click on the heading to expose the contents. Both are for differentiated learning.

  1. These problems are comparable in difficulty to the main "For You to Do" activities.
  2. Their numbering is part of the same sequence as the main activities, so there is no ambiguity in referring to an activity by number.
  3. Our plan is that these activities be self-assigned by students themselves. They are worthwhile, not "solve these 50 equations" mindless repetition, but they aren't required, either for the AP or for our ideas about a complete CS course.
  4. If a student pair finishes a lab page early, they can work on these instead of jumping to the next page. But don't let students rush through the main activities to get to these; they should take the time to understand what they're doing and why.
  5. All of the If There Is Time activities are "hinted" so that they don't make the page feel infinitely long to students still working on the main lesson.
  1. These problems are valuable and encouraged, but students can proceed to next lessons without doing these. In that sense, they are optional.
  2. Like the "If There Is Time" activities, these are best when self-assigned. Students should be prepared to have their minds stretched by these, and should enjoy (or learn to enjoy) that feeling.
  3. They are lettered rather than numbered to emphasize that they're not part of the "regular" course work.
  4. You can use them as differentiation for students who move faster.
  5. Or assign them for homework.
  6. Some of them can also become the basis for student projects.
  7. Tough Stuff
  8. Some of the Take It Further activities are especially challenging. They are marked with the "Tough Stuff" road sign. Do not assign them to the class!

Optional Teaching Resources

Teachers have asked us for additional activities, and teachers have also reported having trouble fitting the entire curriculum into a year.

In response to this feedback, we have created a variety of additional supports available on each unit's Teacher Guide overview page that include vocabulary activities, formative assessment questions, and AP CSP preparation prompts that support the Create Task. Nevertheless, we recommend that, except for the five minutes of Computing in the News, students spend the entire period, every class period, working on the labs. (Social Implications labs may require small discussion groups, but ideally in the programming labs, students get straight to work without your help. Your idea role is walking around the room, looking over shoulders, and dealing with question.) The BJC curriculum is paced for this class format.

In addition, this curriculum is designed to support students in finding the beauty and joy in actively doing computer science and reflecting on its social implications rather than feeling like they are jumping through hoops with worksheet and supplemental documents. We encourage teachers not to collect student lab work, either directly or through secondary forms. BJC assessment and grading occurs at the end of each unit, roughly once a month.

Why not grade more frequently?

Any given student may find any particular lab challenging, and that can create enough anxiety without grade anxiety. And the goals of encouraging nontraditional CS students isn't helped by insisting that everyone learn at exactly the same speed.

Because BJC students are always working in pairs and pairs are encouraged to talk to other pairs, the BJC classroom format allows students to help each other over the humps. But even with all these opportunities for support, any given students may not understand some lab until they've had time to go over it at home, too late for an end-of-period assessment.