Welcome To Computer Science Fundamentals
Welcome To Computer Science Fundamentals
Course Resources 25
Code.org Website 25
Course Overview Structure and Iconography 26
Lesson Structure and Iconography 29
Types of Lessons in CS Fundamentals 29
Code Studio Debugging Features 37
Appendix C: Notes 75
All Code.org curriculum resources are free to use under a Creative Commons Attribution-
NonCommercial-ShareAlike 4.0 International License. Our technology is developed as an open
source project. Common Sense Media lessons are shareable under a Creative Commons Attribution-
NonCommercial-NoDerivatives 4.0 licence. No remixing permitted. View detailed license information
at creativecommons.org. Common Sense and other associated names and logos are trademarks of
Common Sense Media, a 501(c)(3) nonprofit organization (FEIN: 41-2024986).
All courses make suitable entry points for students. Courses E and F feature “ramp up” lessons which
are intended to introduce or review important concepts from previous courses at an accelerated pace.
CS Fundamentals Express Courses
In addition to courses A-F, CS Fundamentals also offers two “express courses”, which are designed
for situations where the teacher is a less active role in engaging students. An express course might be
used, for example, if a student is learning CS on her own.
Express courses do not have unplugged lessons (lessons that do not use a computer), and instead
focus on covering the content from their A-F counterparts in a way that can be delivered without a
teacher. The table below maps courses A-F and the two express courses:
Standards Mapping
CS Fundamentals was written using both the K–12 Computer Science Framework (k12cs.org) and the
2017 Computer Science Teachers Association (CSTA) standards as guidance. Courses have
opportunities to connect to Common Core and NGSS standards. Details can be found at
curriculum.code.org/csf/standards.
Assessments
At Code.org, we believe that you know your students best, which is why we do not attempt to
automatically determine what “grade” students should receive for any given lesson. Instead, we try to
build tools that allow you to easily see student progress and to identify evidence of learning. The
ability to see where a student is succeeding and where they need help is fundamental to providing the
opportunity to tailor their learning experience. For that reason, our teacher dashboard is continually
evolving to better highlight the work done by your class sections. Keep an eye on Code.org Support
(https://support.code.org/) for more information on changes and improvements.
Please note, we have provided assessment worksheets with most unplugged lessons and
“assessment” puzzles for many online lessons.
Teachers in Classrooms
We believe students learn best with the help of an empowered teacher. We design our materials for a
classroom setting and provide teachers robust supports that enable them to understand and perform
their critical role in supporting student learning. Because teachers know their students best, we
empower them to make choices within the curriculum, even as we recommend and support a variety
of pedagogical approaches. Knowing that many of our teachers are new to computer science
themselves, our resources and strategies specifically target their needs.
Equity
We believe that acknowledging and shining a light on the historical inequities within the field of
computer science is critical to reaching our goal of bringing computer science to all students. We
provide tools and strategies to help teachers understand and address well-known equity gaps within
the field. We recognize that some students and classrooms need more support than others, and those
with the greatest needs should be prioritized. All students can succeed in computer science when
given the right support and opportunities, regardless of prior knowledge or privilege. We actively seek
to eliminate and discredit stereotypes that plague computer science and alienate the very students we
aim to reach.
Curriculum as a Service
We believe that curriculum is a service, not just a product. Along with producing high quality materials,
we seek to build and nourish communities of teachers by providing support and channels for
communication and feedback. Our products and materials are not static entities, but a living and
breathing body of work that is responsive to feedback and changing conditions. To ensure ubiquitous
access to our curriculum and tools, they are web-based and cross-platform, and will forever be free to
use and openly licensed under a Creative Commons license.
Pedagogical Approach To Our Values
When we design learning experiences, we draw from a variety of teaching and learning strategies all
with the goal of constructing an equitable and engaging learning environment.
Concept chunks are the big ideas that provide structure to a course. Concept chunks
make it easy for teachers to see at a glance what is covered in a course.
Each CS Fundamentals course has between 4 and 6 concept chunks, and each chunk can have one
or several lessons. In most cases, concept chunks begin with a computer-free lesson called an
Unplugged Lesson, which is meant to introduce a concept before students engage with programming
lessons. Programming lessons require students to use computers and consist of Skill Building,
Application, and End of Course Project lesson types.
To illustrate, below are the five lessons contained in the “Loops” concept chunk in Course C, as they
appear on Code Studio.
You will learn more about how the curriculum is organized in the ‘Course Resources’ section
below.
The following pages provide an overview of each of the 6 courses in the CS Fundamentals
curriculum. For each course, there is one page giving an overview, describing the core concepts,
attitudinal goals, and teaching tips. Then, there is one page that follows, outlining each lesson of the
course.
Course A
Overview
Course A offers a computer science curriculum for beginning readers in early elementary grades.
Students will learn to program using commands like loops and events. The lessons featured in this
course also teach students to collaborate with others meaningfully, investigate different problem-
solving techniques, persist in the face of difficult tasks, and learn about internet safety. By the end of
this course, students create their very own custom game in the Play Lab programming environment
on Code.org.
Core concepts:
Digital Citizenship
Sequencing
Loops
Events
Attitudinal goals:
Programming is fun.
It’s okay not to get it right the first time.
I can solve problems if I keep trying.
Concept
# Lesson Name Description
Chunk
Safety in My
Digital Created by Common Sense Education, students practice
1 Online
Citizenship Neighborhood
staying safe while exploring online.
Loops 7 Happy Loops Students learn about an easier way to solve problems
using loops.
This lesson builds on the idea of using loops in a
8 Loops with Scrat
program.
Course B
Overview
Course B was developed with first graders in mind. Tailored to a novice reading level, this course also
assumes limited knowledge of shapes and numbers.
While the concepts in Course B parallel those in Course A, students will be exposed to more
sophisticated unplugged lessons and a greater variety of puzzles. Students will learn the basics of
programming, collaboration techniques, investigation and critical thinking skills, persistence in the face
of difficulty, and internet safety. At the end of this course students will create their very own custom
game in the Play Lab programming environment on Code.org.
Core concepts:
Digital Citizenship
Sequencing
Loops
Impacts of Computing
Events
Attitudinal goals:
Programming is fun.
It’s okay not to get it right the first time.
I can solve problems if I keep trying.
Concept
# Lesson Name Description
Chunk
Created by Common Sense Education, students will learn
Digital that the information they put online leaves a digital
1 Digital Trails
Citizenship footprint or “trail.”
The Big Event This lesson shows that events are a great way to add
11
Jr. variety to a pre-written algorithm.
Course C
Overview
Course C was developed for students in and around the second grade. Lessons in this course may
assume a limited understanding of shapes and elementary math concepts.
Students will create programs with sequencing, loops, and events. They will translate their initials into
binary, investigate problem-solving techniques, and develop strategies for building positive
communities both online and off. By the end of the course, students will create interactive games that
they can share. Each concept in Course C is taught from the beginning, graduating toward
experiences that allow for growth and creativity to provide all students a rich and novel programming
experience.
Core concepts:
Digital Citizenship
Sequencing
Binary
Loops
Events
Data
Attitudinal goals:
I can read code and predict the outcome.
Programming can make repetitive tasks easy.
Concept
# Lesson Name Description
Chunk
Binary 8 Binary Bracelets This lesson helps demonstrate how it is possible to take
something from real life and translate it into a series of ons
and offs.
Using the language from the first ‘My Robotic Friends Jr.’
My Loopy Robotic
9 activity, students find that they can build big structures faster
Friends Jr.
using loops.
Loops with Rey and Students will use loops to traverse mazes more efficiently
10
BB-8 than before.
Harvesting Crops Students will loop new actions to help the harvester collect
11
Loops with Loops multiple veggies growing in large bunches.
Students will get the chance to practice ideas that they have
Looking Ahead with
12 learned up to this point, as well as getting a sneak peek at
Minecraft
conditionals.
Students will learn that events are a great way to make their
14 The Big Event
program interactive.
End of Course Students plan and build a game using Play Lab, totally from
Project 18
Project scratch.
Course D
Overview
Course D was created for students who read at roughly a third grade level. Angles and mathematical
concepts are introduced with helpful videos and hints.
The course begins with a review of the concepts found in Courses A, B, and C. This review can be
used to introduce or refresh basic ideas, such as loops and events. Afterward, students will develop
their understanding of algorithms, nested loops, while loops, conditionals, and events, as well as learn
about digital citizenship. This course is crafted to build a strong foundation of basic concepts before
opening up to a wide range of new and exciting topics.
Core concepts:
Sequencing
Events
Loops
Conditionals
Binary
Digital Citizenship
Attitudinal goals:
Struggle is good and a sign that I’m growing.
I can read programs and predict their outcomes.
Programs can be written to make simple choices.
Concept
# Lesson Name Description
Chunk
Graph Paper In this lesson, students will program their friends to draw
1
Programming pictures.
Introduction to This lesson will give students practice in the skills they will
2
Online Puzzles need for this course.
Sequencing
Relay This lesson builds on the previous lessons by introducing
3
Programming teamwork.
Debugging with In this lesson, students will learn about the secrets of
4
Laurel debugging.
5 Events in Bounce Students get to make their own video game in this lesson.
Build a Star Wars
6 Students build their own Star Wars game in this lesson.
Events Game
Time to celebrate! In this lesson, students will program their
7 Dance Party
own interactive dance party.
As a quick update (or introduction) to using loops, this
8 Loops in Ice Age lesson will have students using the repeat block to get Scrat
to the acorn more efficiently.
Loops Drawing Shapes In this lesson, loops make it easy for students to make even
9
with Loops cooler images with Artist.
Nested Loops in This lesson will teach students what happens when they
10
Maze place a loop inside another loop.
Conditionals with It's time to play a game in which students earn points only
11
Cards under certain conditions.
Now that students understand conditionals, it's time to
12 If/Else with Bee program Bee to use them when collecting honey and
nectar.
Conditionals
While Loops in This lesson will teach students about a new kind of loop:
13
Farmer while loops.
14 Until Loops in Maze Students learn to use until loops in this lesson.
Harvesting with This lesson will help students practice deciding when to use
15
Conditionals each conditional.
Students learn how computers store pictures using simple
16 Binary Images
ideas like on and off.
Binary
Binary Images with In this lesson, students will learn how to make images using
17
Artist binary.
Digital Be A Super Digital Created by Common Sense Education, students learn how
18
Citizenship Citizen they can be upstanders when they see cyberbullying.
End of Course This capstone lesson takes students through the process of
Project 19
Project designing, developing, and showcasing their own projects!
Course E
Overview
Course E in CS Fundamentals was tailored to the needs of students in the fourth grade.
At this point, students should be growing in their confidence with using basic programming concepts
and are ready to start using them to solve more novel problems. Throughout this course, students will
learn to identify when to apply and combine the many concepts they’ve learned in previous courses.
Students will begin with some light review, followed by a deep dive into the idea of functions. For
many, the lessons in Course E will provide the first puzzles where difficult concepts are mixed
together, making it one of the most challenging courses in the series.
Because of the complexity of Course E, it is important to be consistent with expectations from the very
beginning. With fourth graders, it is advised that students are encouraged to work together to find
solutions rather than relying on help from the teacher or another experienced supervisor. Students
should be empowered to try multiple techniques and should be given praise for persistence and for
helping others.
Ultimately, Course E will set the foundation for Course F in the fifth grade. This means that it is as
critical for students to understand the ideas behind each puzzle as it is for them to successfully solve
it. For this reason, you might want to show students how to use peer interaction or journaling to help
with difficult puzzles. Mainly, they should be able to ask and answer four questions:
What does the puzzle want me to do?
What did I try to make that happen?
Where did it go wrong?
What might be the next thing I could try?
Core concepts:
Sprites
Digital Citizenship
Nested Loops
Functions
Impacts of Computing
Attitudinal goals:
There are often many ways to solve a problem.
Reflecting on past problems helps me solve new ones.
Programming is creative.
Concept
# Lesson Name Description
Chunk
Sequencing in Students will practice sequencing and debugging before adding
1
Maze new skills.
This lesson gets students thinking about why loops are better than
2 Drawing with Loops
longhand.
Ramp Up Conditionals in Students will get the chance to practice ideas that they have
3 Minecraft: Voyage learned up to this point, as well as getting a sneak peek at
Aquatic conditionals.
Conditionals with This lesson introduces students to `while` loops and `if / else`
4
the Farmer statements.
In this lesson, students will play a game intended to get them
thinking about the way commands need to be given to produce the
5 Simon Says
right result. This will help them more easily carry over to the Sprite
Lab programming environment in the upcoming lessons.
Sprites
Swimming Fish In this lesson, students will learn about the two concepts at the
6
with Sprite Lab heart of Sprite Lab: sprites and behaviors.
Alien Dance Party Using Sprite Lab, students create their own alien dance party with
7
with Sprite Lab interactions between characters and user input.
Private and Created by Common Sense Education, this lesson is about the
8 Personal difference between information that is safe to share online and
Information information that is not.
Digital By creating an interactive poster in Sprite Lab, students will apply
About me with
Citizenship 9 their understanding of sharing personal and private information on
Sprite Lab
the web.
Students will learn the proper way to use content that is not their
10 Digital Sharing
own.
Nested Loops in In this online activity, students will have the opportunity to push
11
Maze their understanding of loops to a whole new level.
Fancy Shapes Students will create intricate designs using Artist. By continuing to
Nested Loops 12 using Nested practice nested loops with new goals, students will see more uses
Loops of loops in general.
Nested Loops with This lesson will take students through a series of exercises to help
13
Frozen them create their own portfolio-ready images.
This lesson will help students intuitively understand why combining
14 Songwriting
chunks of code into functions can be such a helpful practice.
Functions in Students will begin to understand how functions can be helpful in
15
Minecraft this fun and interactive Minecraft adventure.
Functions Students will use functions to harvest crops in Harvester. This
Functions with
16 lesson will push students to use functions in the new ways by
Harvester
combining them with `while` loops and `if / else` statements.
Functions with Students will be introduced to using functions with the Artist to
17
Artist create and modify magnificent images.
In this lesson, students will learn about accessibility and the value
Impacts of Designing for
18 of empathy through brainstorming and designing accessible
Computing Accessibility
solutions for hypothetical apps.
End of Course Students will be given their own space to create their project with
Project 19
Project either Artist or Sprite Lab.
Course F
Overview
The final course in CS Fundamentals is tailored to the needs of students in the fifth grade.
In this course, students will investigate problem-solving techniques and discuss societal impacts of
computing and the internet. By the end of the course, students will have created interactive stories
and games that they can share with their friends and family.
In Course F, students begin to understand how the concepts that they have learned impact the world
around them and how they can be applied to solve interesting and personally-relevant problems. By
this point, students should be cognitively mature enough to think about plans that they want to bring to
life and have the skills to start down that path.
Starting with the first few lessons, students are given greater autonomy and creative freedom in
programming, which also necessitates an increased emphasis on debugging and problem solving.
Students in the fifth grade should be expected to take the first steps in solving all of their own coding
problems as they arise. When solving problems, they should be encouraged to work with peers to
overcome obstacles rather than relying on the teacher to do so.
Remember, solving a puzzle is not as important as understanding a puzzle, so when students are
stuck, encourage them to look at several angles until a solution begins to appear.
Core concepts:
Digital Citizenship
Variables
Data
For Loops
Sprites
Attitudinal goals:
I can use computer science to solve real and meaningful problems.
Programming is creative.
Concept Lesson
# Description
Chunk Name
Functions in Students will begin to understand how functions can be helpful in
1
Minecraft this fun and interactive Minecraft adventure.
This lesson is designed to introduce students to the Sprite Lab
Swimming Fish
2 programming environment and allow them to apply concepts they
with Sprite Lab
learned in other environments to this tool.
Alien Dance Party Using Sprite Lab students create their own alien dance party with
Ramp Up 3
with Sprite Lab interactions between characters and user input.
Drawing with This Artist stage will allow students to create images of increasing
4
Loops complexity using new blocks and the concept of loops.
In this online activity, students will have the opportunity to push
Nested Loops in
5 their
Maze
understanding of loops to a whole new level.
Created by Common Sense Education, students learn what they
Digital The Power of
6 should do when someone uses mean or hurtful language on the
Citizenship Words
internet.
Envelope
7 This lesson explains what variables are and how to use them.
Variables
Variables with Students explore the creation of repetitive designs using variables
8
Artist in Artist.
Variables Changing
9 Variables with Students will get further practice with variables with the bee.
Bee
Changing
10 Variables with This artist level takes variables to new heights.
Artist
By running a simple simulation in Sprite Lab, students will
Simulating
11 experience how computing can be used to collect data that identify
Experiments
trends or patterns.
This tutorial is designed to quickly introduce students to machine
learning, a type of artificial intelligence. Students will explore how
Data 12 AI for Oceans
training data is used to enable a machine learning model to
classify new data.
In this lesson, students will pretend to flow through the internet, all
13 The Internet the while
learning about connections, URLs, IP addresses, and the DNS.
Students play a game with dice to learn a powerful new
14 For Loop Fun
programming concept: for loops.
For Loops with This lesson focuses on `for` loops as students look for patterns in
For Loops 15
Bee puzzles with the bee.
For Loops with
16 Students continue to practice `for` loops, this time with Artist.
Artist
Behaviors in Here, students will use Sprite Lab to create their own customized
17
Sprite Lab behaviors.
Sprites
Virtual Pet with In this lesson, students will create an interactive Virtual Pet that
18
Sprite Lab looks and behaves how they wish.
End of Course Students will be given their own space to create their project with
Project 19
Project either Artist or Sprite Lab.
Lead Learner
What is it?
The curriculum has been written with the idea that the instructor will act as the lead learner. As the
lead learner, your role shifts from being the source of knowledge to being a leader in seeking
knowledge. The lead learner’s mantra is: “I may not know the answer, but I know that together we can
figure it out.” The philosophy of the lead learner is that you don’t have to be an expert on everything;
you can start teaching CS Fundamentals knowing what you already know and learn alongside your
students. To be successful with this style of teaching and learning, the most important things are
modeling and teaching how to learn.
We believe that the lead learner technique represents good teaching practice in general. Acting as the
lead learner is an act of empathy toward your students and the challenges they face in learning
material for the first time. One important job of the teacher in the CS Fundamentals classroom is to
model excitement about investigating how things work by asking motivating questions about why
things work the way they do and or why they are the way they are. With your guidance, students will
learn how to hypothesize; ask questions of peers; test, evaluate, and refine solutions collaboratively.
It can be hard to introduce pair programming after students have worked individually for a while, so
we recommend that teachers start with pair programming in the first few lessons. Just like any other
classroom technique, you may not want to use this all the time as different types of learners will
respond differently to working in this context. Once you have established pair programming as a
practice early on, it will be easier to come back to later.
Resources
Code.org also has a feature to help both students get “credit” on their accounts for the work they do
together. Check out the blog on Pair Programming: https://goo.gl/MorPnx.
Videos:
For Teachers: youtu.be/sxToW3ixrwo
For Students: youtu.be/vgkahOzFH2Q
The National Center for Women & Information Technology (NCWIT) has a great resource about the
benefits of pair programming. Check it out at: www.ncwit.org/resources/pair-programming-box-power-
collaborative-learning
Authentic Choice
What is it?
Authentic choice is the practice of allowing students to decide on the focus of their creation when they
are working on a project. This can be scoped in different ways with different projects, but the central
point is to allow students to work on something they are personally invested in.
In addition, we encourage teachers to help students utilize their new skills in creative ways at the end
of each lesson using the Lesson Extras option. There, students will find challenge puzzles and open-
canvas projects to use for deeper learning and self-expression.
Journaling
What is it?
In CS Fundamentals, students are encouraged to keep a journal nearby to write down thoughts and
answer questions.
Student Practices
Lessons in CS Fundamentals help students work in a wide array of contexts, but these experiences
are tied together by a core set of practices and skills they develop throughout each course. These
student practices provide coherence and serve as helpful reminders of the high-level skills and
dispositions we want students to develop.
Problem Solving
Use a structured problem solving-process to help solve new problems.
View challenges as solvable problems.
Break down larger problems into smaller components.
Persistence
Value and expect mistakes as a natural and productive part of problem solving.
Continue working towards solutions in spite of setbacks.
Iterate and continue to improve partial solutions.
Keep track of elements that worked and elements that did not to avoid repeating mistakes.
Creativity
Incorporate your own interests or ideas into your work.
Experiment with new ideas and consider multiple possible approaches.
Extend or build upon the ideas and projects of others.
Collaboration
Work with others to develop solutions that incorporate all contributors.
Mediate disagreements and help teammates agree on a common solution.
Actively contribute to the success of group projects.
Communication
Structure your work so that it can be easily understood by others.
Consider the perspective and background of your audience when presenting your work.
Provide and accept constructive feedback in order to improve your work.
Debugging
Everyone gets bugs! Therefore, debugging is an essential skill all students should develop that builds
on the student practices discussed above. Without strong debugging skills, students can become
frustrated. Help keep students moving by implementing both active and reflective debugging
strategies in your classroom.
Active Debugging
New programmers are prone to writing long chunks of code without pausing to read or test their work
along the way, which can snowball into a program that is very hard to debug. To prevent this, we
suggest implementing active debugging as part of a general coding philosophy.
Active debugging describes the practice of debugging while coding. This generally means students
taking time during coding exercises to read, process, and test small pieces of code that they have just
written. “Small pieces of code” is relative, of course, particularly if students are tasked with coming up
with a solution that requires just one or two blocks. However, the practice itself can be tremendously
helpful as students write longer programs, which gradually occurs in all CS Fundamentals courses.
A practical student-facing guide to active debugging exists in our Debugging Guide, which can be
found on the Course Overview Page of each course, and is shown below. This guide lists active
debugging strategies for students. We suggest making this document available to students as a
classroom poster or individual handout, then referring to it as students progress through your course.
Guide to Debugging
Reflective Debugging
While students are working, you will notice the same issues appearing again and again. Some
students are able to quickly move through these issues, while others are left behind. Even with active
debugging practices in place, these experiences can be disheartening for any teacher. However, they
can, in fact, inspire a productive reflective debugging session at some point during the class.
Active debugging is how individual students can find and fix their own bugs. Reflective debugging, on
the other hand, is a practice in which students participate in debugging as an entire class. ‘Bug Talks’
and keeping a ‘bug tracker’ are two examples of strategies that can be used to implement reflective
debugging in your classroom and are described below:
Bug Talks
Bug Talks are very similar to “Number Talks” from the world of mathematics education. Teachers can
use Bug Talks before, during, or after class to help students clear up misconceptions that manifest as
common bugs. A typical Bug Talk should last 5-10 minutes and might proceed as follows:
1. A problem is displayed for students to solve on their own, quietly. The problem should be
small enough that they can solve it mentally or with scratch paper. Students who were able to
solve the problem very quickly should try coming up with more than one solution. An example
problem might be a buggy solution to a puzzle on the website, perhaps similar to the one
students are currently struggling with.
2. After having time to work alone, students can share their ideas with a neighbor.
3. After sharing with a neighbor, students raise hands to share answers with the class.
4. The teacher neutrally records as many answers as possible on the board. That is, the teacher
does not say which are correct or incorrect. Duplicate answers are given +1, +2, and so forth.
5. Teacher calls on students to explain the reasoning behind their answers. Students can
respond to each other’s arguments with sentence starters like, “I agree/disagree, because…”.
6. Finally, students discuss and vote on which answer they collectively believe is the best
solution.
To conclude a Bug Talk, teachers should reiterate why the chosen strategy works best, including any
unmentioned points the class might not have brought up.
Bug Tracker
A Bug Tracker is a poster that can help your students name and understand common problems they
encounter while coding. Throughout a CS Fundamentals course, students collectively drive the
development of their class’ Bug Tracker through teacher-led discussions about coding and problem
solving.
Small misconceptions can lead to big problems when learning to code. You can
help students clear these misconceptions by facilitating class discussions about
specific instances of bugs they catch. During these discussions, your Bug Tracker
can be used as a class-sourced running record that generalizes those instances
Why Create a into more widely applicable and accurate coding concepts.
Bug Tracker?
In addition to identifying and describing common bugs, students should share
debugging strategies on your Bug Tracker as well. This collective exchange of
knowledge can help empower students to persist together through even the
toughest challenges.
You may want to discuss bugs students have found at the beginning or end of
class, or even potentially during class if it seems many students are encountering
How Do I Use the same types of problems. Encourage students to refer back to the Bug Tracker
the Bug while they work. You can challenge your students to look for the bugs they
Tracker? spotted as they work. Have them tell a neighbor when they see one. Can they
come up with strategies to get past it? Ask students to hold on to new bugs if they
happen to find them. They can share their bugs during the next Bug Talk.
What “Bugs” This is actually a great question and one that we hope your students will grapple
Might Appear on with as they learn. At least at the beginning of your course, you might hear
a Bug Tracker? students suggest, “The computer won’t turn on,” or “The Internet is slow” be
added to the class’ Bug Tracker. This is a perfect time to discuss, and further
instill, the meaning of “coding” and “debugging,” although relating these CS-
specific concepts to other difficulties students experience (technical and non-
technical) is certainly worthy of discussion.
Course Resources
The CS Fundamentals curriculum is made up of student-facing and teacher-facing components.
Teachers will access curriculum materials in two different places on the Code.org website: our Code
Studio platform and in the teacher-facing curriculum. The table below outlines what you can do in
each of these places:
The following pages contain an overview of the layout and organization of these important course
resources.
Code.org Website
Log in to Code.org with your teacher account. The website header will help you navigate the site:
The Code.org home page is the starting point for everything in the curriculum. To get started with your
students, you will need to create a section. For details on how to create a section, visit the getting
started support articles at support.code.org.
Once you’ve assigned your CS Fundamentals students to a section, a tile that can be used to access
the course overview page will appear on the homepage. This is your starting point for lesson planning
and all the resources you need to teach the course.
Course Overview Structure and Iconography
Code Studio — Course Overview
The course overview page on Code Studio (e.g., studio.code.org/s/coursea) is a hub for managing
your course and includes the following:
Using the toggle on the top right of the unit overview page in Code Studio yields one of two options: a
detailed view of the unit or a collapsed view:
These levels contain videos along with any other resources necessary for
students to access while completing unplugged lessons.
Because the nature of an unplugged lesson means that you might not want
your students on a computer during the lesson, you should feel free to
project these resources at the front of the room and invite any students
who missed the unplugged lesson to use the materials posted here as a
tool to learn more about what they missed.
These levels contain instructions, text, or images to help you run a class
activity. Lesson instructions will indicate how these levels should be
incorporated into the activity. A lesson overview provides a short activity
description and links to documents used throughout the lesson.
Video levels contain a video to be used in the curriculum and are typically
hosted in multiple formats, including a downloadable file, to be compatible
with a variety of technology needs across classrooms.
These levels represent some sort of check for understanding, usually in the form of
multiple-choice or free-response questions. You will find these levels in individual
lessons, indicated with an assessment icon. In that case, these are intended to be
used as formative assessment items. Students can always see them and change
their responses at any time.
Question levels are also in the post-project test found at the end of each unit. In
those cases, the items are meant to be summative assessment items.
1. Unplugged. These lessons are done away from the computer and are often used to
introduce a new concept in a hands-on, tangible way.
2. Skill Building. These lessons are done on the computer and give students structured
practice with a new tool or programming concept.
3. Application. These lessons are done on the computer and give students space to apply
learned concepts in creative ways.
4. End-of-Course Project. These longer lessons are done both on and off the computer and
provide an open-ended space for students to bring together everything they’ve learned in the
course into a single, creative project.
These lesson types contribute to the flow of concept chunks, which were described on page 6. See
below for an example of a concept chunk from Course C as seen on Code Studio (left) and in the
teacher-facing curriculum (right):
The following pages provide more details on each of these lesson types and how they manifest in
concept chunks.
Unplugged Lessons
We refer to lessons in which students are not working on a computer as “unplugged.” Students will
often work with pencil and paper or physical manipulatives. These are intentionally placed kinesthetic
opportunities that help students digest complicated concepts in ways that relate to their own lives.
Often an unplugged lesson sets the stage for a subsequent skill-building lesson investigating the
same concept on the computer. Both types of lessons are vital pieces of the curriculum.
Unplugged lessons are particularly useful for building and maintaining a collaborative classroom
environment, and they are useful touchstone experiences you can refer to when introducing more
abstract concepts. While these lessons sometimes involve more advanced preparation, they provide a
shared and concrete context that can be referenced during other lessons. For a list of all unplugged
lessons covered in the CS Fundamentals curriculum (plus a few extras!) visit:
code.org/curriculum/unplugged
Tips for Effectively Teaching Unplugged Lessons:
Don’t skip these activities! They’re often an essential introduction to new concepts.
Teach lessons in the order they are written. The sequence is designed to scaffold student
understanding.
Help students identify the computer science concepts underlying the activities.
Refer back to unplugged lessons to reinforce concepts in subsequent lessons.
Skill-Building Lessons
The majority of “plugged” or computer-based lessons in CS Fundamentals are skill building and are
designed to help students get hands-on practice with tools and concepts. On Code Studio, these
lessons typically consist of practice puzzles, videos, prediction puzzles, and free play activities.
You can read more about these Code Studio activity types in the next section.
Skill building lesson plans typically have many of the same features as their unplugged counterparts.
Lessons will begin and end with discussions or activities that help motivate and synthesize learning.
Key moments for you to check in with your students are noted in lesson plans. Students will use a
computer, but the ways students interact with each other and your role as the teacher are still
important considerations.
These puzzle progressions generally start with a sequence of practice puzzles that gradually increase
until reaching a challenge puzzle. There are often additional puzzles after the challenge that
intentionally get easier to help build efficacy and confidence at the end of the lesson.
Bridging Activities
Bridging activities connect our unplugged lessons to our skill building lessons in a real and concrete
way. They often exist as a method of turning an abstract concept or idea learned through unplugged
play into an actionable tool for the upcoming puzzles.
In a given concept chunk that starts with an unplugged lesson, you will find a bridging activity as the
“warm up” in the first skill building lesson that follows. As you become more comfortable with the
curriculum, feel free to come up with your own online/offline blends to keep the curriculum relevant to
your classroom.
Application Lessons
While similar in appearance to our other online puzzles, application tasks are special in that they were
designed to allow students to apply what they have learned in a creative way.
These lessons typically walk students through the creation of a mini-project that will be unique for
them based on their own creative decisions. There are no right or wrong answers here! Unlike skill
building lessons where student work is typically validated for correctness automatically, there is no
validation in these lessons. This is because the mini-project work that students do in application
lessons is much more open-ended. To determine if students are successfully applying learned
concepts, reviewing their code is essential.
End-of-Course Projects
Each course offers the opportunity for students to take what they’ve learned at the end of a lesson
and put it together into a unique project that represents their own creativity.
In Courses A-B, this takes the format of exercises that have multiple solutions. Course C takes
students through a progression to build a more complex program in which the students drive many of
the decisions.
In Courses D-F, project development takes the stage. Here, students are encouraged to plan, build,
revise, and present projects of their own. Following a project from inception to delivery offers an inside
look at the software development cycle. These guided projects offer scaffolded rubrics for the benefit
of both student and teacher.
Lesson plans give you an interactive view into all of the text content and instructions students see on
the platform.
With this view, you can quickly browse through what students see for each level in the lesson without
having to step through each level on Code Studio.
This should greatly speed up your preparations for class or serve as fast way to remind yourself
what’s in each lesson.
Practice puzzles are the most common type of online activity found in CS
Fundamentals lessons. Students are given explicit instructions about a task to
perform and provided with a toolbox of programming commands and hints.
These puzzles are automatically validated which means that students receive
instant feedback about the accuracy of their code. Students can typically just be
Practice expected to work through these progressions, either with a partner or at their
own pace.
Most of our skill building lessons contain one “challenge” puzzle near the end of
the lesson series. Challenge puzzles are intended to inspire students to try new
things with the concepts they are learning. It will test their persistence, highlight
misconceptions, and hopefully lead them to the “ah-ha” moment that educators
love. If the lesson you are teaching contains a challenge puzzle, consider letting
students know in advance. Encourage them to persevere and understand that it
may take additional time and effort to complete these tasks. In case it is needed,
all challenge puzzles have a “Skip” button which allows students to move on. Be
Challenge sure to set expectations with your class around how to engage with this type of
activity.
Step Button
Lesson Pacing
In general, all students should move lesson to lesson at a pace set by the teacher. This is easy to do
in a teacher-led unplugged lesson but can be trickier in skill-building and application lessons in which
students move through activities at different speeds. The two challenges here are in recognizing when
a class is ready to move on and knowing how to make sure all students are working on something
appropriate for them within the same concept chunk.
Unplugged Lessons: These lessons involve the full class learning a concept together and are a
great way to kick off a concept together as a whole class.
Skill-Building Lessons: These lessons contain optional lesson extras as well as challenge puzzles
that students can actually choose to skip. If a student skips a challenge puzzle or lesson extra but
moves through the rest of the lesson quickly, encourage them to go back and try the challenge and
lessons extras. It is not necessary for all students to complete all challenges and lesson extras before
moving the class onto the next lesson. If a student’s progress shows that they haven’t finished a full
lesson yet, consider seeing if they are stuck at a challenge puzzle or something more basic and
responding appropriately. For some concept chunks there are multiple skill-building lessons. When
this is the case, it is not required that all students do every level of every skill-building lesson. You
should use your judgement about when students are ready to move on to the application lessons or to
the next concept chunk.
Application Lessons: Due to the more open-ended nature of these lessons, students can actually
pass some levels in these lessons just by clicking “Finish.” This should be discouraged as these
lessons are one of the best ways for students to demonstrate their learning. They are also a great
place to encourage creativity and give students space to apply the concepts they’ve learned in new
ways. If some students move through an application lesson quickly, help them brainstorm ideas or
encourage them to get feedback from peers.
Projects: In addition to the open-ended project lesson at the end of most courses, it is also possible
for students to create a new project at any time by clicking the “Create” button in the top right corner
of Code Studio. If a student has already shown good understanding of a concept, consider having
them build a new project using what they know rather than just moving onto the next lesson ahead of
the class.
1:1 computers
Even if you have 1:1 computers, consider grouping students up for pair programming. This setup
allows students to gain insight into the problem-solving processes of their peers while helping them to
develop collaboration and communication skills.
Limited time
If you are short on time, choose a concept and teach it thoroughly. In elementary school, the main
goal is to teach students that they are capable of learning computer science. If you ditch a deep dive
on concepts in favor of a shallow introduction, students might be left feeling as if they don’t
understand any of it.
We are compiling a list of activities on code.org/athome that are ideal to share with students or
families interested in doing some computer science on their own. This list includes activities for
students with no computers or internet access.
We designed the lessons in CS Fundamentals for use in a classroom with an actively engaged
teacher, but many lessons can adapt well to at-home learning. Learning with CS Fundamentals does
require an internet-connected device with a modern browser, something we realize not all students
can access right now.
You can track your students’ progress to see where they are. You may be able to use resources like
video conferencing or email to assist students and provide feedback.
We also recommend you consider CSTA's Resources to Support Teaching During COVID-19 for an
extensive set of options for continuing to teach computer science during school closures.
Tech Requirements and Required Materials
Technical Requirements
A computing device and an Internet connection
We work hard to build an environment that supports all modern web browsers on desktops and mobile
devices. This includes Internet Explorer 11+ and the latest versions of Firefox, Chrome, Safari, and
Edge.
Our instructional videos may be affected depending on your school's internet filters. If YouTube is
blocked at your school, our video player will attempt to use our non-YouTube player instead. For more
details about the IT requirements for accessing and playing our embedded videos, see our IT
requirements page at code.org/educate/it. We’ve made all of our videos available for download using
a link located in the bottom corner. If all fails, some videos have a “Show Notes” tab that provide a
storyboard equivalent of the video.
Beyond printing, some lessons call for typical classroom supplies and manipulatives, such as student
journals, poster paper, markers, colored pencils, scissors, scrap paper, glue or tape.
Cours
Lesson Materials
e
Course A Marble Run (optional activity) Kid friendly marbles or round cereal (1-5/group)*
Lesson 3: My Robotic Friends
Plastic cups (10/group of 2-3)*
Jr.
Lesson 7: Creating Art with
Optional - Protractors (1/student)
Code
Course C
Markers. Optional – 18 black/18 white beads, 1 pipe
Lesson 8: Binary Bracelets
cleaner per student
Lesson 9: My Loopy Robotic
Paper cups (20/group of 4)
Friends Jr.
Lesson 7: Dance Party Optional - Headphones (1/student)
Lesson 10: Conditionals with
Deck of cards or something similar (1/group of 4-6)*
Course D Cards
Optional - Groupings of opposite items to display to
Lesson 16: Binary Images
students
Course E Lesson 10: Digital Sharing Smartphone or tablet
Lesson 6: The Power of Words Colored Pencils, string the length of the classroom
Here, you’ll find our “Help and support” forum where you can email us or find how-to articles. You’ll
also see a link to our “Teacher community” forums where you can connect to other teachers for
support, teaching tips, or best practices.
When you’re in a puzzle, you’ll see an additional “Report a problem” link for that puzzle. Thank you for
helping us find and fix any issues.
Code.org increases diversity in computer science by reaching students of all backgrounds where they
are — at their skill-level, in their schools, and in ways that inspire them to keep learning. Read about
our efforts to increase diversity in computer science at code.org/diversity. In order to support this
vision of diverse and meaningful access to computer science, Code.org has developed a full pathway
of learning opportunities that span K-12. The CS Fundamentals curriculum is specifically designed to
meet the needs of elementary school students and teachers along that pathway.
As always, it is thanks to our generous donors that we were able to develop and offer this curriculum
at no cost to schools, teachers, or students: Microsoft, Infosys Foundation USA, Facebook, Omidyar
Network, Google, Ballmer Family Giving, Ali and Hadi Partovi, Bill Gates, The Bill and Melinda Gates
Foundation, BlackRock, Jeff Bezos, John and Ann Doerr, Mark Zuckerberg and Priscilla Chan,
Quadrivium Foundation, Amazon Web Services, The Marie-Josee and Henry R. Kravis Foundation,
Reid Hoffman, Drew Houston, Salesforce, Sean N. Parker Foundation, Smang Family Foundation,
Verizon.
Make a Plan
Goal
You have thought about and made a detailed plan for how you might teach an unplugged
lesson in a way that leverages the CS Fundamental instructional practices and supports
students
What’s happening Where can this
happen in the
lesson?
Making connections
Where is there space in this lesson to make connections to the real
world/other things students are learning in school?
Make a Plan
Goal
You have thought about and made a detailed plan for how you might teach the lesson in a
way that leverages the CS Fundamental instructional practices and supports students
Supporting debugging
Where do you think students might need to engage in debugging during
this lesson (which levels/activities)? How can you support them with that
debugging?
Making connections
Where is there space in this lesson to make connections to the real
world/other things students are learning in school?
☆
1
7 8 9 1 11 12
0
13 14 15 1 17 18
6
19 20 21 2 23 24
2
25 26 27 2 29 30
8
Play Again!
1. Write a program. (Use → ← ↑ ↓ ) 3) Draw! Follow your partner’s program:
Step 2 3 4 5 6
☆
1
7 8 9 1 11 12
0
13 14 15 1 17 18
6
19 20 21 2 23 24
2
25 26 27 2 29 30
8
Scavenger Hunts
Implementation Unconference 74
1. Creating and managing 2. Navigating and accessing course 3. Viewing and assessing
sections: materials: student work:
Resources
All of the topics explored in this scavenger hunt have support articles associated with them. If at any
time you want help finding answers, see the support resources linked at the top of the shared notes
(“code.org resources”) or visit support.code.org and use the search box to find what you need.
BONUS: Where can you see all of the sections you have
JOINED on code.org?
Moving students Do you have to move students one at a time, or can you
between sections move multiple students at once?
Accessing
Pause and Practice: If you haven’t looked over the
Lesson Plans curriculum page (which houses all of the lesson plans for
a given course), take a minute or two and check in out
now.
Viewing sample
solutions How do you exit the solution once you’re looking at it?
Choose which course you’re going to explore today, based on the grades you
teach:
Step IfIf you teach a single grade, choose the course associated with that grade.
you teach CS Fundamentals to multiple grades, choose which course to explore
2 today based on considerations like:
Which course you have the least experience with
Which grade you spend the most time with
Step Find your lesson recommendation below by matching up the lesson type and
3 course you want to explore:
Plugged — Plugged — Plugged — End of
Unplugged
Skill-Building Application Course Projects
A.10: Ocean A.12: On the There are currently no open ended
Course A A.7 - Happy projects written into courses A-B,
Kindergarten Loops
Scene with Move with but if you’re interested in
Loops Events developing an open ended project
you can start with the materials in
Course B B.10 - The B.9: Drawing B.12: A lesson C.18
First Grade Right App Gardens with Royal Battle
Loops with Events
Course C C.13: Sticker C.16: Chase
C.8: Binary C.18 - End of Course
Second Art with Game with
Grade Bracelets Project
Loops Events
D.17: Binary D.6 - Build a
Course D D.16: Binary D.19 - End of Course
Third Grade
Images with Star Wars
Images Project
Artist Game
Course E E.17: E.13 - Nested
E.14 - E.19 - End of Course
Fourth Functions Loops in
Grade Songwriting Project
with Artist Frozen
F.8 -
Course F F.7 -
Fifth Grade Changing F.18 - Virtual F.19 - End of Course
Envelope
Variables Pet Project
Variables
with Artist
Make a Plan
Goal
You have thought about and made a detailed plan for how you might teach the lesson in a
way that leverages the CS Fundamental instructional practices and supports students
Making connections
Where is there space in this lesson to make connections to the real
world/other things students are learning in school?
How much of
CS
Fundamental
s do you want
to teach to
your
students?
Now that
we've spent
more time
digging into
CS
Fundamental
s, what is top
of mind as a
barrier for
making CS
Fundamental
s work in
your
classroom?
Think both in
terms of getting
as far as you
might like and in
terms of making
those lessons as
effective as
possible.
What goals
do you have
for your CS
Fundamental
s Class?
Appendix C: Notes
Use the following pages to jot down questions,
ideas, and reflections as you engage with
curriculum at workshops and while teaching.