# Standards Alignment

Extra lessons are nice, but Math teachers don't have 25 hours of spare classtime to spend on new materials, no matter how good it might be.

That's why Bootstrap is aligned to National and State Standards for Mathematics, covering most Functional and Algebraic standards from Grade 7 through Algebra 2. This alignment makes it possible to integrate Bootstrap into the classroom smoothly, using time you've already planned into your pacing guidelines or scope and sequence plans.

For states using the Common Core, Bootstrap is also a model implementation of Common Core Standards for Mathematical Practice, offering explicit pedgagogical recommendation across all eight practice standards.

Bootstrap also satisfies several of the CSTA (Computer Science Teacher's Association) standards across levels 1 (grades K-6), 2 (grades 6-9), and 3 (grades 9-12); Bootstrap1 (the algebra-oriented first course) covers standards in levels 1 and 2, while Bootstrap2 goes deeper into computer science and covers more standards in levels 2 and 3.

# What's Covered in 25 Hours?

## Alignment

MP.1: Make sense of problems and persevere in solving them Bootstrap students are confronted with challenging problems, and use a problem-solving methodology known as the Design Recipe to solve them. The recipe teaches critical thinking, asking students to write down what they know and think through each step on their way to a solution.
MP.2: Reason abstractly and quantitatively Students focus on mathematical models of program behavior, and use quantitative examples to prove these models correct.
MP.3: Construct viable arguments and critique the reasoning of others Teachers engage students in discussion about each step in the Design Recipe, asking them to explain how they move from one step to another. In addition, students are challenged to debug the code of others, not just by identifying programmatic flaws but by also identifying faulty reasoning.
MP.4: Model with mathematics When Bootstrap students want their characters to move, to stay onscreen or collide with one another, they must first model that behavior mathematically. And since the programming language is purely algebraic, these models become the programs themselves!
MP.5: Use appropriate tools strategically Even programmers know that a computer isn't the perfect tool for every situation. Bootstrap students draw graphical diagrams, write out written examnples, and use the computer when the situation calls for it.
MP.6: Attend to precision Communicating precisely is key, whether you're a mathematician or a professional progammer. In Bootstrap, students consider datatypes, select clear function and variable names, and write comments for their code.
MP.7: Look for and make use of structure Bootstrap students look closely at worked-out examples before generalizing to a formula, as part of the Design Recipe. When working with the Circles of Evaluation, students consider the structure of arithmetic expressions as functions being composed on one another -- and this structure becomes the basis for their code.
MP.8: Look for and express regularity in repeated reasoning By practicing the Design Recipe repeatedly, students begin to discern the connection between multiple representations of functions. They notice patterns in the examples they write and contracts they derive.

## Bootstrap Units

N-Q: Reason quantitatively and use units to solve problems. Units 1, 2, 3 and 5
6.NS.5-8: Apply and extend previous understandings of numbers to the system of rational numbers. Unit 1
7.EE.1-4: The student uses numerical and algebraic expressions and equations to solve real-life and mathematical problems. Units 3 and 6
8.F.1-3: Define, evaluate, and compare functions. Unit 4, 6 and 8
A-SSE.1-2: Interpret the structure of expressions Units 1, 2, 3, 7 and Supplemental Lessons
A-SSE.3-4: Write expressions in equivalent forms to solve problems Units 1, 2 and Supplemental Lessons
A-CED.1-4: Create equations that describe numbers or relationships Units 3, 4, 5, 6, 7, 8 and Supplemental Lessons
A-REI.1-2: Understand solving equations as a process of reasoning and explain the reasoning Units 1, 2 and Supplemental Lessons
A-REI.3-4: Solve equations and inequalities in one variable Unit 6
A-REI.10-12: Represent and solve equations and inequalities graphically Unit 6
8.G.6-8: Understand and apply the Pythagorean Theorem Unit 8
F-IF.1-3: Understand the concept of a function and use function notation Units 2-9 and Supplemental Lessons
F-IF.4-6: Interpret functions that arise in applications in terms of the context Units 3, 4, 6, 8 and Supplemental Lessons
F.IF.7-9: Analyze functions using different representations Units 3-9 and Supplemental Lessons
F-BF.1-2: Build a function that models a relationship between two quantities Units 3-9 and Supplemental Lessons
F-BF.3-4: Build new functions from existing functions Units 6, 7, 8 and Supplemental Lessons
F-LE.1-4: Construct and compare linear, quadratic, and exponential models and solve problems Unit 3
F-LE.5: Interpret expressions for functions in terms of the situation they model Unit 5 and Supplemental Lessons
F-TF.5: Model periodic phenomena with trigonometric functions Supplemental Lessons

## Alignment

L1:6:CT.1: Understand and use the basic steps in algorithmic problem-solving (e.g., problem statement and exploration, examination of sample instances, design, implementation, and testing). Bootstrap:Algebra - Units 2-8
Bootstrap:Reactive - Units 1-10

Bootstrap teaches students to develop programs and solve problems through a concrete sequence of steps called the Design Recipe. Summarizing problem statements, writing test cases, designing functions around data, coding, and testing are all explicit steps in this recipe. Bootstrap1 begins introducing these steps in unit 2, building on them throughout the curriculum. Bootstrap2 extends these steps into richer structured data.
L1:6:CPP.6: Implement problem solutions using a block-based visual programming language. N/A
Bootstrap currently has students implement programs in a simple textual language.
L2:CT:1: Use the basic steps in algorithmic problem-solving to design solutions (e.g., problem statement and exploration, examination of sample instances, design, implementing a solution, testing, evaluation). Bootstrap:Algebra - Units 2-8
Bootstrap:Reactive - Units 1-10

Bootstrap teaches students to develop programs and solve problems through a concrete sequence of steps called the Design Recipe. Summarizing problem statements, writing test cases, designing functions around data, coding, and testing are all explicit steps in this recipe. Bootstrap:Algebra begins introducing these steps in unit 2, building on them throughout the curriculum. Bootstrap:Reactive extends these steps into richer structured data.
L2:CT:6: Describe and analyze a sequence of instructions being followed (e.g., describe a character's behavior in a video game as driven by rules and algorithms). Bootstrap:Algebra - Units 5 and 7
Bootstrap:Reactive - Units 3-6, 8-10

In Bootstrap, students write algebraic functions that are used repeatedly to move characters across a screen and respond to key presses. Bootstrap emphasizes sequences of instructions less than other early programming efforts, but in doing so gains close adherence to algebra.
L2:CT:7: Represent data in a variety of ways including text, sounds, pictures, and numbers. Bootstrap:Algebra - Units 2-8
Bootstrap:Reactive - Units 1-10

Students write functions that consume and produce each of text, images, and numbers in the Bootstrap curriculum. Functions over each datatype are used in students' games, as well in as the in-class exercises.
L2:CT:14: Examine connections between elements of mathematics and computer science including binary numbers, logic, sets and functions. Bootstrap:Algebra - Units 1-9
Bootstrap:Reactive - Units 1-10

Bootstrap relies heavily on algebraic functions. Students learn how different representations of functions from mathematics (domain/range, input/output tables, and symbolic representations) correspond to important artifacts in writing programs. Within their games, students use Boolean logic to determine how characters move, to report collisions, and to determine when characters have moved off the screen.
L2:CPP:4: Demonstrate an understanding of algorithms and their practical application. Bootstrap:Algebra - Units 3-8
Bootstrap:Reactive - Units 2-10

Bootstrap emphasizes computation, particularly the idea that computations are reusable with different inputs. Through their games and in-class exercises, students see various applications for reusable computations in practical settings.
L2:CPP:5: Implement problem solutions using a programming language, including: looping behavior, conditional statements, logic, expressions, variables, and functions. Bootstrap:Algebra - Units 1-9
Bootstrap:Reactive - Units 1-10

Bootstrap:Algebra covers functions, variables, logic, and conditionals (this is all one needs to create a rich game in our software infrastructure!). Bootstrap:Reactive introduces looping in the context of handling multiple similar game elements with similar behavior.
L2:CPP:9: Collect and analyze data that is output from multiple runs of a computer program. Bootstrap:Algebra - Units 3-8
Bootstrap:Reactive - Units 2-10

Design and execution of test cases is emphasized throughout Bootstrap:Algebra and Bootstrap:Reactive. Students are required to write multiple test cases (including expected answers for each) for each function; our software helps them track which tests are passing and which are failing.
L3:CT:A2: Describe a software development process used to solve software problems (e.g. design, coding, testing, verification). Bootstrap:Algebra - Units 3-8
Bootstrap:Reactive - Units 1-10

Bootstrap's Design Recipe emphasizes design, coding, and testing from early in Bootstrap:Algebra. The process is explicit in Bootstrap's worksheets and exercises. Bootstrap:Reactive continues to emphasize this process.
L3:CPP:A2: Use mobile devices/emulators to design, develop, and implement mobile computing applications. Bootstrap:Reactive - Unit 10
Bootstrap:Reactive has optional material on writing games that respond to common mobile-phone stimuli (such as shaking, tilting, and GPS), and a library for exporting these games to mobile phones.
L3:CPP:A3: Use various debugging and testing methods to ensure program correctness (e.g., test cases, unit testing, white box, black box, integration testing). Bootstrap:Algebra - Units 3-8
Bootstrap:Reactive - Units 1-10

Testing is emphasized throughout Bootstrap. Bootstrap:Algebra drills black-box test cases (with tests written before corresponding code). As problems get more challenging in Bootstrap:Reactive, students begin to confront elements of white-box testing as well. Note: Bootstrap does not introduce modular programming, as would be required to cover integration testing.
L3:CPP:A4: Apply analysis, design, and implementation techniques to solve problems (e.g., use one or more software lifecycle models). Bootstrap:Algebra - Units 2-8
Bootstrap:Reactive - Units 1-10

Bootstrap's Design Recipe is a step-by-step software development technique that emphasizes test-first and data-driven design. Bootstrap strongly recommends (and has exercises written for) pair programming, a common software development practice.
L3:CPP:A8: Explain the program execution process Bootstrap:Algebra - Units 1-8
Bootstrap:Reactive - Units 1-10

Bootstrap1 introduces this process at a general level; students dig deeper into how programs evaluate when they reach loops in Bootstrap:Reactive.
L3:CPP:A12: Describe how mathematical and statistical functions, sets, and logic are used in computation. Bootstrap:Algebra - Units 3-8
Bootstrap:Reactive - Units 1-10

Bootstrap puts mathematical and logical functions in the context of programming videogames.
L3:CT:B5: Use data analysis to enhance understanding of complex natural and human systems. Bootstrap:Reactive - Units 3-10
Bootstrap:Reactive begins to emphasize data modeling: the Design Recipe includes an explicit step in which students determine how to model data for a problem and develop illustrative examples of the problem relative to their data model.
L3:CT:B6: Compare and contrast simple data structures and their uses (e.g., arrays and lists). Bootstrap:Reactive - Units 2-10
Bootstrap:Reactive emphasizes the differences between structs (compound data with fixed numbers of fields) and lists (compound data with arbitrary numbers of elements). Students practice recognizing each of these basic data patterns in various problems, and learn how to nest these concepts to build richer data structures (advanced students can easily get to trees with this approach). Note: Bootstrap does not cover different linear data structures (lists versus arrays), preferring to emphasize how to design richer data structures from simple building blocks of structs and lists.
L3:CT:B10: Decompose a problem by defining new functions and classes. Bootstrap:Algebra - Units 6 and 8
Bootstrap:Reactive - Units 4-10

Bootstrap introduces students to programming problems that benefit from decomposition into multiple functions and data structures. The Design Recipe provides some structured guidance on when to introduce new functions when decomposing problems.
L3:CPP:B2: Use tools of abstraction to decompose a large-scale computational problem (e.g., procedural abstraction, object-oriented design, functional design). Bootstrap:Algebra - Units 6 and 8
Bootstrap:Reactive - Units 4-10

Bootstrap:Algebra introduces the core idea of functions as abstractions over repeated computations. Bootstrap:Reactive moves into larger programs that get decomposed into subproblems, which are designed, implemented, and tested independently.
L3:CPP:B7: Use data analysis to enhance understanding of complex natural and human systems. Bootstrap:Reactive - Units 4-10
Bootstrap:Reactive begins to emphasize data modeling: the Design Recipe includes an explicit step in which students determine how to model data for a problem and develop illustrative examples of the problem relative to their data model.

## Alignment

Practice 1: Fostering an Inclusive Computing Culture By integrating Computing into standard math classes, Bootstrap allows schools to immediate create an inclusive computing environment. Everyone takes math, which means everyone computes. But in addition to the course settings the curriculum allows, Bootstrap also embeds teamwork, metacognition and group reflection into every step of the programming process - from co-designing a game to thinking about effective co-working strategies, Bootstrap's pedagogy fosters an inclusive culture.
Practice 2: Collaborating Around Computing Bootstap students work on small teams, and must cultivate relationships with other students who possess diverse perspectives, skills and personalities. Students work on problems together, and are given strategies to evaluate and give feedback to one another at each step in the problem-solving process.
Practice 3: Recognizing and Defining Computational Problems Bootstrap uses real-world problems throughout the course, as students are constantly engaged in the creation of a meaningful computational artifact (a videogame of their own invention, modeling a physics simulation, or analyzing a rich dataset). Each part of this project requires that students identify problems that can be solved computationally, decompose those problems into sub-problems, and evaluate the limits of their solutions.
Practice 4: Developing and Using Abstractions Students develop and use abstractions throughout the course, starting with visual-spatial representations for arithmetic expressions and ending with complex, multi-function programs that define, use and re-use student-generated abstractions. Students define everything from Functions (Bootstrap:Algebra) to Data Structures (Bootstrap:Reactive), and Reactive Simulations (Bootstrap:Physics) to Big Data queries (Bootstrap:Data Science).
Practice 5: Creating Computational Artifacts Bootstrap's project-based approach is absed on the creation of computational artifacts. Students write programs to draw flags, make a rocket blast off, trap a butterfly, run a cash register, implement a videogame, answer real questions with data, and model an observed physical phenomenon. The creation of these artifacts is personal, customizable, and based on a rigorous methodology for iterative design and problem solving.
Practice 6: Testing and Refining Computational Artifacts Many introductory courses treat testing as a second-class citizen, either asking students to test by running a program and "seeing if it looks right" or by using programming tools that completely lack and framework for automated testing. By contrast, Bootstrap introduces testing early on in the course, and our language and software enviroment offer rich support for writing tests and developing software based on test feedback.
Practice 7: Communicating About Computing Students in our Data Science module must choose a question that matters to them, select a relevant dataset, and answer that question - justifying their choice and answer at every step. Students in our Physics, Data Structures and Algebra courses explain their thinking as well, whether it's about the creation of a piecewise function to handle key events or a data structure to model an interactive program.
Hardware and Software Bootstrap:Reactive, Bootstrap:Data Science and Bootstrap:Physics introduce students to sophisticated programming paradigms, in which they must process user input as mediated by the software evironment. This mediation involves the flow of information from multiple sources (keyboards, mice, GPS systems, and internet-connected resources), and students must consider this flow when designing their programs.
Troubleshooting All Bootstrap modules embrace Example Driven Design, in which students write test cases for each abstraction they create. This bakes in troubleshooting by design: a student immediately has a mechanism to locate an error, and knows a pedagogical approach for debugging their thinking process.
Data Collection Students in Bootstrap:Data Science and Bootstrap:Physics collect data using an array of tools techniques: tapping into existing datasets (e.g. - Spreadsheets) as well as automated or manual sampling using an array of instruments. The choice of sampling mechanism is instruction, as it exposes students to the strengths and weaknesses of a particular approach. Movement-tracking via observation v. changes in a cell phone's GPS coordinates, for example, will influence the amount and quality of the data that is collected.
Visualization and Transformation Our Data Science module embraces authentic data science concepts in a lightweight fashion: students must identify, transform, clean and manipulate data sets as they explore a research question of their own design. This involves everything from visualizing to aggregation, and rearrangement to transformation.
Inference and Models Bootstrap:Algebra and Bootstrap:Reactive are all build around students' developing a model for a desired (or observed) behavior. Bootstrap:Algebra has students model the process of computation, and Bootstrap:Reactive gives students the ability to model the data behind it. Bootstrap:Physics goes one step farther, having students use these models to predict the behavior of a complex system. In these activities, the tradeoffs between model complexity and model quality become clear.
Algorithms Bootstrap students consider many algorithms throughout our material. They are confronted with multiple ways to reach a solution, asked to generalize a algorithms so they can be re-used for other problems, and given opportunities to discuss the tradeoffs between different approaches.
Variables Bootstrap introduces variables early on, with students confronting variables and functions almost immediately in Bootstrap:Algebra. These variables can be used to represent Numbers, Strings, Images, Booleans, data structures of infinite complexity, and even remote spreadsheets stored across the internet! Our pedagogy explicitly asks students to come up with meaningful identifiers for every variable they use, and Bootstrap:Reactive allows students to select their own Data Structures. (Note: in a slight deviation from the K12CS standards, Bootstrap uses the mathematical concept of variable. Namely, we do not discuss the notion of "machine storage", since that concept directly undermines the notion of variables in mathematics.)
Control Students in all of Bootstrap's modules confront program control, sequences of evaluation, and conditionals. Bootstrap:Reactive, Data Science and Physics add loops and event handlers, to create more complex behavior.
Modularity Bootstrap's focus on abstraction works hand in hand with the concept of modularity. Students decompose complex problems into smaller ones, and build abstractions (functions, data structures, etc) to solve them. The abstractions are used to organize code, and can be composed with one another or repurposed to solve more complex problems without having to duplicate code. Students assemble these abstractions to form complex, reactive programs - relying on the modularity of those abstractions to manage complexity.
Program Development Our pedagogy is based on a robust process for program development, known as the Design Recipe. This approach has been used for decades at the university level, and mirrors many best practices from industrial contexts. The Design Recipe is an iterative process that involves defining type specifications, communicating those specifications through writing, building example-driven test cases, implementation, and testing.