Chapter 5 Practices Including Computational Thinking

第五章 包括计算思维的实践





The seven core practices of computer science describe the behaviors and ways of thinking that computationally literate students use to fully engage in today’s data-rich and interconnected world. The practices naturally integrate with one another and contain language that intentionally overlaps to illuminate the connections among them. They are displayed in an order that suggests a process for developing computational artifacts. This process is cyclical and can follow many paths; in the framework, it begins with recognizing diverse users and valuing others’ perspectives and ends with communicating the results to broad audiences (see Figure 5.1).

计算机科学的七个核心实践描述了具备计算素养的学生用来充分参与当今这个数据丰富和相互关联的世界的行为和思维方式。这些实践彼此之间自然地相互融合,并包含有意重叠的语言,以说明它们之间的联系。它们的展示顺序表明了开发计算制品的过程。 这个过程是循环的,可以遵循多种途径; 在本框架中,此过程从识别多样的用户和重视他人的观点开始,以向广大受众传播结果为终 (见图5.1)。


Unlike the core concepts, the practices are not delineated by grade bands. Rather, the practices use a narrative to describe how students should exhibit each practice with increasing sophistication from kindergarten to Grade 12. In addition to describing the progression, these narratives also provide some examples of the interrelatedness of the practice statements and the ways in which these statements build upon one another.

与核心概念不同的是,这些实践并没有按等级划分。相反,这些实践使用了一种叙述的方式来描述学生应该如何展示从幼儿园到12年级逐渐提升每一种实践。 除了描述进展之外,这些叙述同时也提供了一些相互关联的实践案例的陈述,以及这些陈述之间是如何递进。


Computational Thinking



Computational thinking is at the heart of the computer science practices and is delineated by practices 3–6. Practices 1, 2, and 7 are independent, general practices in computer science that complement computational thinking.

计算思维是计算机科学实践的核心,并由实践3-6描述。 实践1,2,7是相互独立的,是补充计算思维的计算机科学一般性实践。


Figure 5.1: Core practices including computational thinking

图5.1: 包括计算思维的核心实践


Defining Computational Thinking



Computational thinking refers to the thought processes involved in expressing solutions as computational steps or algorithms that can be carried out by a computer (Cuny, Snyder, & Wing, 2010; Aho, 2011; Lee, 2016). This definition draws on the idea of formulating problems and solutions in a form that can be carried out by an information-processing agent (Cuny, Snyder, & Wing, 2010) and the idea that the solutions should take the specific form of computational steps and algorithms to be executed by a computer (Aho, 2011; Lee, 2016). Computational thinking requires understanding the capabilities of computers, formulating problems to be addressed by a computer, and designing algorithms that a computer can execute. The most effective context and approach for developing computational thinking is learning computer science; they are intrinsically connected.

计算思维指在呈现由计算机可以执行的运算步骤或算法的解决方案时涉及到的思维过程 (Cuny,Snyder & Wing,2010; Aho,2011; Lee,2016)。 这个定义借鉴了用一种可以由信息处理代理执行的形式来设置问题和制定解决方案的思想 (Cuny,Snyder,& Wing,2010) 以及解决方案应该采取计算步骤和计算机执行算法的特定形式的思想 (Aho,2011; Lee,2016)。 计算思维需要了解计算机的能力,提出计算机要解决的问题,设计计算机可以执行的算法。 发展计算机计算思维最有效的环境和方法是学习计算机科学; 它们之间有着内在的联系。


Computational thinking is essentially a problem-solving process that involves designing solutions that capitalize on the power of computers; this process begins before a single line of code is written. Computers provide benefits in terms of memory, speed, and accuracy of execution. Computers also require people to express their thinking in a formal structure, such as a programming language. Similar to writing notes on a piece of paper to “get your thoughts down,” creating a program allows people to externalize their thoughts in a form that can be manipulated and scrutinized. Programming allows students to think about their thinking; by debugging a program, students debug their own thinking (Papert, 1980).

计算思维本质上是一个解决问题的过程,包括设计利用计算机能力的解决方案; 这个过程在编写第一行代码之前就开始了。计算机在内存、速度和执行的准确性方面提供了优势。 计算机同时也要求人们用一种正式的结构(如编程语言)来表达他们的想法。 类似于在一张纸上记笔记来“记下你的想法” ,创建一个程序允许人们以一种可以操控和审查的形式将他们的想法具体化。 编程允许学生思考他们的思考; 学生通过调试程序调试他们自己的思考(Papert,1980)。


Despite what the name implies, computational thinking is fundamentally a human ability. In other words, “[h]umans process information; humans compute” (Wing, 2008, p. 3718). This nuance is the basis for “unplugged” approaches to computer science (i.e., teaching computer science without computers) and explains how computational thinking can apply beyond the borders of computer science to a variety of disciplines, such as science, technology, engineering, and mathematics (STEM), but also the arts and humanities (Bundy, 2007).

不管它的名字暗示了什么,计算思维根本上是一种人类的能力。 换句话说,“人类处理信息; 人类计算” (Wing,2008,p. 3718)。 这种细微差别是计算机科学“不插电”方法的基础 (即在没有计算机的情况下教授计算机科学) ,并解释了计算思维如何跨越计算机科学的边界、被应用于各种学科,如科学、技术、工程和数学(STEM) ,同时也被应用于艺术和人文学科 (Bundy,2007)。


Distinguishing Computational Thinking



The description of computational thinking in the K–12 Computer Science Framework extends beyond the general use of computers or technology in education to include specific skills such as designing algorithms, decomposing problems, and modeling phenomena. If computational thinking can take place without a computer, conversely, using a computer in class does not necessarily constitute computational thinking. For example, a student is not necessarily using computational thinking when he or she enters data into a spreadsheet and creates a chart. However, this action can include computational thinking if the student creates algorithms to automate the transformation of the data or to power an interactive data visualization.

《K-12年级计算机科学框架》中对计算思维的描述超越了计算机或技术在教育中的一般应用,包含了如设计算法、分解问题和对现象进行建模等特定技能。 如果计算思维可以在没有计算机的情况下使用,反过来,在课堂上使用计算机也不一定包含计算思维。 例如,当一个学生在电子表格中输入数据和创建一个图表时,他或她不一定使用计算思维。 然而,如果学生创建了能够将数据转换自动化或者能够驱动交互式数据可视化的算法,那么这个行动就包含计算思维。


A computational artifact must be distinguished by evaluating the process used to create it (i.e., computational thinking), in addition to the characteristics of the product itself. For example, the same digital animation may be the result of carefully constructing algorithms that control when characters move and how they interact or simply selecting characters and actions from a predesignated tem­plate. In this example, it is the process used to create the animation that defines whether it can be considered a computational artifact. The assessment of computational thinking can be improved by having students explain their decisions and development process (Brennan & Resnick, 2012).

除了作品本身的特性之外,计算制品必须通过评估用于创建它的过程 (例如,计算思维) 来区分。 例如,相同的数字动画可能是精心构建算法的结果,这些算法控制角色何时移动以及它们如何相互作用,也可能只是简单地从预先设计好的模板中选择角色和动作的结果。 在本例中,用于创建动画的过程定义了是否可以将其视为计算制品。 对于计算思维的评估可以通过让学生解释他们的决策与开发过程的方式来完善。


Computer Science Practices and Other Subject Areas



The framework is grounded in the belief that computer science offers unique opportunities for develop­ing computational thinking and that the framework’s practices can be applied to other subjects beyond computer science. As Barr and Stephenson (2011) have noted, the “computer science education community can play an important role in highlighting algorithmic problem solving practices and applications of computing across disciplines, and help integrate the application of computational methods and tools across diverse areas of learning” (p. 49).

该《框架》基于这样一个信念,即计算机科学为发展计算思维提供了独特的机会且该《框架》的实践可以应用于计算机科学以外的其它学科。 正如 Barr 和 Stephenson (2011)所指出的,“计算机科学教育共同体能够在突出强调算法问题求解的实践以及计算机运算在不同学科中的应用方面发挥重要作用,并帮助整合计算机运算方法和工具在不同学习领域中的应用” (第49页)。


While computational thinking is a focus in computer science, it is also included in standards for other subjects. For example, computational thinking is explicitly referenced in the practices of many state science standards1 and implicitly in state math standards.2 Additionally, the recent revision to the International Society for Technology in Education Stan­dards for Students (ISTE, 2016) describes computational thinking in a similar way as the framework. All of these documents share the vision that computational thinking is important for all students.

虽然计算思维是计算机科学的一个焦点,但它也包括在其它学科的标准中。 例如,计算思维在许多州的科学教育标准的实践中被明确引用1,同时也在州数学标准中被含蓄引用。2 此外,最近修订的《国际教育技术学会学生标准》(ISTE,2016) 以与本框架类似的方式描述了计算思维。 所有这些文件都有一个共同的观点,那就是计算思维对所有学生都很重要。


Figure 5.2 on the next page describes the intersection among practices in computer science, science and engineering, and mathematics. Explicit instruction is required to create the connections illustrated in the figure.

下一页的图5.2描述了计算机科学、科学和工程以及数学实践之间的交叉。 建立如图所示的连接需要清楚明确的教学。





The writing team thanks the Computational Thinking Task Force of the Computer Science Teachers Association for its contribution to this section.



Figure 5.2: Relationships between computer science, science and engineering, and math practices

图5.2: 计算机科学、科学和工程以及数学实践之间的关系


* Computer science practices also overlap with practices in other domains, including English language arts. For example, CS1. Fostering an Inclusive Computing Culture and CS2. Collaborating Around Computing overlap with E7. Come to understand other perspectives and cultures through reading, listening, and collaborations.

*计算机科学实践同样也与其它领域的实践重合,包括英语语言艺术。 例如,CS1. 培育包容性计算文化和 CS2. 围绕计算的协作与 E7. 通过阅读、聆听和合作来了解其它观点和文化重合。





Aho, A. V. (2011, January) Computation and Computational Thinking. ACM Ubiquity, 1, 1-8.


Barr, V., & Stephenson, C. (2011). Bringing computational thinking to K–12: What is involved and what is the role of the computer science education community? ACM Inroads, 2, 48–54.


Brennan, K., & Resnick, M. (2012). Using artifact-based interviews to study the development of computational thinking in interactive media design. Paper presented at the annual meeting of the American Educational Research Association, Vancouver, BC, Canada.


Bundy, A. (2007). Computational thinking is pervasive. Journal of Scientific and Practical Computing, 1, 67–69.


Cuny, J., Snyder, L., & Wing, J.M. (2010). Demystifying computational thinking for non-computer scientists. Unpublished manuscript in progress. Retrieved from http://www.cs.cmu.edu/~CompThink/resources/TheLinkWing.pdf


International Society for Technology in Education. (2016). ISTE standards for students. Retrieved from https://www.iste.org/resources/product?id=3879&childProduct=3848


Lee, I. (2016). Reclaiming the roots of CT. CSTA Voice: The Voice of K–12 Computer Science Education and Its Educators, 12(1), 3–4. Retrieved from http://www.csteachers.org/resource/resmgr/Voice/cstavoice032016.pdf


National Governors Association Center for Best Practices & Council of Chief State School Officers. (2010). Common core state standards for mathematics. Washington DC: Author.


Next Generation Science Standards Lead States. (2013). Next generation science standards: For states, by states. Washington, DC: The National Academies Press.


Papert, S. (1980). Mindstorms: Children, computers, and powerful ideas. NY: Basic Books.


Wing, J. M. (2006, March). Computational thinking. Communications of the ACM, 49(3), 33–35.


Wing, J. M. (2008). Computational thinking and thinking about computing. Philosophical Transactions of the Royal Society, 366(1881), 3717–3725.



Practice 1. Fostering an Inclusive Computing Culture

实践1. 培养包容性的计算文化


Overview: Building an inclusive and diverse computing culture requires strategies for incorporating perspectives from people of different genders, ethnicities, and abilities. Incorporating these perspectives involves under­standing the personal, ethical, social, economic, and cultural contexts in which people operate. Considering the needs of diverse users during the design process is essential to producing inclusive computational products.

概述: 建立一个包容和多样化的计算机文化需要能够融合不同性别、种族和能力的人的视角的策略。 融合这些视角涉及对人们所处的个人、道德、社会、经济和文化背景的理解。 在设计过程中考虑不同用户的需求对于产生包容性的计算制品至关重要。


By the end of Grade 12, students should be able to


1. Include the unique perspectives of others and reflect on one’s own perspectives when designing and developing computational products.

1. 在设计和开发计算制品时,将他人的独特观点纳入考虑范围以及对自己的观点进行反思。

At all grade levels, students should recognize that the choices people make when they create artifacts are based on personal interests, experiences, and needs. Young learners should begin to differentiate their technology preferences from the technology preferences of others. Initially, students should be presented with perspectives from people with different backgrounds, ability levels, and points of view. As students progress, they should independently seek diverse perspec­tives throughout the design process for the purpose of improving their computational artifacts. Students who are well-versed in fostering an inclusive computing culture should be able to differ­entiate backgrounds and skillsets and know when to call upon others, such as to seek out knowl­edge about potential end users or intentionally seek input from people with diverse backgrounds.

在所有年级,学生应该认识到,人们在创造制品时所做的选择是基于个人兴趣、经历和需求的。 年幼的学习者应该先从区分他们自己的技术偏好与其他人的技术偏好开始。 最初,应该向学生展示来自不同背景、拥有不同能力水平或不同观点的人的视角。 随着学生的成长,他们应该在整个设计过程中独立地寻求不同的视角,以改进他们的计算制品。 精通包容性计算文化的学生应该能够区分不同的背景和技能,并知道什么时候去请求其他人,比如获取潜在的最终用户的知识,或者有意识地从不同背景的人那里搜集信息。

2. Address the needs of diverse end users during the design process to produce artifacts with broad accessibility and usability.

2. 在设计过程中满足不同终端用户的需求,以生成具有广泛可及性和可用性的制品。

At any level, students should recognize that users of technology have different needs and preferenc­es and that not everyone chooses to use, or is able to use, the same technology products. For example, young learners, with teacher guidance, might compare a touchpad and a mouse to exam­ine differences in usability. As students progress, they should consider the preferences of people who might use their products. Students should be able to evaluate the accessibility of a product to a broad group of end users, such as people with various disabilities. For example, they may notice that allowing an end user to change font sizes and colors will make an interface usable for people with low vision. At the higher grades, students should become aware of professionally accepted accessi­bility standards and should be able to evaluate computational artifacts for accessibility. Students should also begin to identify potential bias during the design process to maximize accessibility in product design. For example, they can test an app and recommend to its designers that it respond to verbal commands to accommodate users who are blind or have physical disabilities.

在任何年级,学生都应该认识到技术的使用者们有不同的需求和偏好,并且不是每个人都选择使用或能够使用相同的技术产品。 例如,年幼的学习者在老师的指导下,可能会通过比较一个触摸板和一个鼠标来检查可用性的差异。 随着学生的成长,他们应该考虑可能使用他们产品的人们的偏好。 学生应该能够评估一个产品对于广泛的终端用户群体,如各类残障人士,的可及性。 例如,他们可能会注意到,允许最终用户改变字体大小和颜色将使界面可用于视力低下人士。 在更高的年级,学生应该意识到专业认可的可及性标准,并应该能够评估计算制品的可及性。 学生也应该开始在设计过程中识别潜在的偏见,以最大限度地提高产品设计的可及性。 例如,他们可以测试一个应用程序,并向它的设计者推荐该应用程序可以响应语言命令以适应盲人或有身体残疾的用户。

3. Employ self- and peer-advocacy to address bias in interactions, product design, and develop­ment methods.

3. 在互动、产品设计和开发方法中运用自我倡议和同行倡议来解决偏见问题。

After students have experience identifying diverse perspectives and including unique perspectives (P1.1), they should begin to employ self-advocacy strategies, such as speaking for themselves if their needs are not met. As students progress, they should advocate for their peers when accommoda­tions, such as an assistive-technology peripheral device, are needed for someone to use a computa­tional artifact. Eventually, students should regularly advocate for both themselves and others.

在学生有识别不同观点和包容独特观点的经验后(P1.1) ,他们应该开始采用自我倡导策略,如果他们的需要没有得到满足,他们应该为自己说话。 随着学生的成长,当他们的同伴在使用某个计算制品时需要提供如某种辅助技术的协调时,他们应该为自己同伴提出倡议。 最终,学生应该定期为自己和他人倡议。

Practice 2. Collaborating Around Computing

实践2. 围绕计算进行协作


Overview: Collaborative computing is the process of performing a computa­tional task by working in pairs and on teams. Because it involves asking for the contributions and feedback of others, effective collaboration can lead to better outcomes than working independently. Collaboration requires individ­uals to navigate and incorporate diverse perspectives, conflicting ideas, disparate skills, and distinct personalities. Students should use collaborative tools to effectively work together and to create complex artifacts.

概述: 协作计算是一种在双人工作和团队工作中执行一个计算性任务的过程。 由于这个过程涉及到寻求他人的贡献和反馈,有效的协作可以比独立工作产生更好的结果。 协作需要个人理解和融合不同的观点、相互冲突的想法、分散的技能和不同的个性。 学生应该使用协作工具来有效地协同工作并创造复杂制品。


By the end of Grade 12, students should be able to


1. Cultivate working relationships with individuals possessing diverse perspectives, skills, and personalities.

1. 培养与具有不同观点、技能和个性的个体的工作关系

At any grade level, students should work collaboratively with others. Early on, they should learn strategies for working with team members who possess varying individual strengths. For example, with teacher support, students should begin to give each team member opportunities to contrib­ute and to work with each other as co-learners. Eventually, students should become more sophisti­cated at applying strategies for mutual encouragement and support. They should express their ideas with logical reasoning and find ways to reconcile differences cooperatively. For example, when they disagree, they should ask others to explain their reasoning and work together to make respectful, mutual decisions. As they progress, students should use methods for giving all group members a chance to participate. Older students should strive to improve team efficiency and effectiveness by regularly evaluating group dynamics. They should use multiple strategies to make team dynamics more productive. For example, they can ask for the opinions of quieter team members, minimize interruptions by more talkative members, and give individuals credit for their ideas and their work.

在任何年级,学生都应该与他人协作。 早期,他们应该学习与拥有不同个人优势的团队成员一起工作的策略。 例如,在老师的支持下,学生应该开始给每个团队成员贡献以及作为共同学习者和他人一起工作的机会。 最终,学生们应该在应用相互鼓励和支持的策略方面变得更加有经验。 他们应该能够在表达自己的想法时使用逻辑推理,并在合作中找到调和分歧的方法。 例如,当他们意见不一致时,他们应该请他人解释自己的理由,并合作做出相互尊重的决定。 随着学生的成长,他们应该采用给所有的小组成员参与的机会的方法。 年龄较大的学生应该通过定期评估团队活力来努力提高团队效率和效力。 他们应该使用多种策略来提高团队互动的效率。 例如,他们可以征求更安静的团队成员的意见,尽量减少更健谈的成员的打断,并对个体的想法和工作给予肯定。

2. Create team norms, expectations, and equitable workloads to increase efficiency and effectiveness.

2. 创建团队规范、期望以及制定公平的工作量,以提高效率和效力。

After students have had experience cultivating working relationships within teams (P2.1), they should gain experience working in particular team roles. Early on, teachers may help guide this process by providing collaborative structures. For example, students may take turns in different roles on the project, such as note taker, facilitator, or “driver” of the computer. As students prog­ress, they should become less dependent on the teacher assigning roles and become more adept at assigning roles within their teams. For example, they should decide together how to take turns in different roles. Eventually, students should independently organize their own teams and create common goals, expectations, and equitable workloads. They should also manage project workflow using agendas and timelines and should evaluate workflow to identify areas for improvement.

学生在培养团队内的工作关系方面(P2.1)有了经验之后,应该积累担任特定的团队角色的工作经验。 在早期,教师可以通过提供协作结构来帮助指导这个过程。 例如,学生可以在项目中轮流承担的角色,比如记录员、协调者或者计算机的“司机”。 随着学生的进步,他们应该减少对老师分配角色的依赖,变得更善于在自己的团队中分配角色。 例如,他们应该共同决定如何轮流承担不同的角色。 最终,学生应该独立地组织自己的团队,并创建共同的目标、期望以及制定公平的工作量。 他们还应该使用议程表和时间轴管理项目工作流程,并对工作流程进行评估,以发现需要改进的领域。

3. Solicit and incorporate feedback from, and provide constructive feedback to, team members and other stakeholders.

3. 从团队成员和其他利益相关者那里征求和整合反馈,并提供建设性的反馈。

At any level, students should ask questions of others and listen to their opinions. Early on, with teacher scaffolding, students should seek help and share ideas to achieve a particular purpose. As they progress in school, students should provide and receive feedback related to computing in constructive ways. For example, pair programming is a collaborative process that promotes giving and receiving feedback. Older students should engage in active listening by using questioning skills and should respond empathetically to others. As they progress, students should be able to receive feedback from multiple peers and should be able to differentiate opinions. Eventually, students should seek contributors from various environments. These contributors may include end users, experts, or general audiences from online forums.

在任何年级,学生都应该问别人提问并听取他们的意见。 早期,在教师提供的脚手架的帮助下,学生应该寻求帮助和分享想法,以达到特定的目的。 随着学生在学校的进步,他们应该提供和接受与计算有关的建设性反馈。 例如,双人编程是一种能促进提供和接受反馈的协作过程。年龄较大的学生应该运用提问技巧进行积极的倾听,并对他人作出富有同理心的回应。 随着学生的进步,他们应该能够从多个同伴那里获得反馈,并且能够区分不同的观点。 最终,学生应该从不同的环境中寻找贡献者。 这些贡献者可能包括终端用户、专家或在线论坛中的一般参与者。

4. Evaluate and select technological tools that can be used to collaborate on a project.

4. 评估和选择可用于项目协作的技术工具

At any level, students should be able to use tools and methods for collaboration on a project. For example, in the early grades, students could collaboratively brainstorm by writing on a white­board. As students progress, they should use technological collaboration tools to manage team­work, such as knowledge-sharing tools and online project spaces. They should also begin to make decisions about which tools would be best to use and when to use them. Eventually, students should use different collaborative tools and methods to solicit input from not only team members and classmates but also others, such as participants in online forums or local communities.

在任何年级,学生都应该能够在项目中使用协作工具和方法。 例如,在低年级,学生们可以通过在白板上写字的方式来进行合作性的头脑风暴。随着学生的进步,他们应该使用技术协作工具来管理团队工作,如知识共享工具和在线项目存储空间。他们也应该开始决定什么工具是最好用的以及什么时候使用它们。 最终,学生应该使用不同的协作工具和方法,不仅从团队成员和同学那里征求意见,也从其他人那里征求意见,比如在线论坛或当地社区的参与者。

Practice 3. Recognizing and Defining Computational Problems

实践3. 识别和定义计算问题


Overview: The ability to recognize appropriate and worthwhile opportuni­ties to apply computation is a skill that develops over time and is central to computing. Solving a problem with a computational approach requires defining the problem, breaking it down into parts, and evaluating each part to determine whether a computational solution is appropriate.

概述: 能够识别应用计算能力的适当的、有价值的机会是一项随着时间发展的技能,并且是计算的核心。 用可计算方法解决一个问题需要定义问题,将问题分解成若干部分,并对每个部分进行评估,以确定可计算解决方案是否合适。


By the end of Grade 12, students should be able to


1. Identify complex, interdisciplinary, real-world problems that can be solved computationally.

1. 识别可以用计算解决的复杂的、跨学科的、现实世界的问题

At any level, students should be able to identify problems that have been solved computationally. For example, young students can discuss a technology that has changed the world, such as email or mobile phones. As they progress, they should ask clarifying questions to understand whether a problem or part of a problem can be solved using a computational approach. For example, before attempting to write an algorithm to sort a large list of names, students may ask questions about how the names are entered and what type of sorting is desired. Older students should identify more complex problems that involve multiple criteria and constraints. Eventually, students should be able to identify real-world problems that span multiple disciplines, such as increasing bike safety with new helmet technology, and can be solved computationally.

在任何年级,学生都应该能够识别已经利用计算解决的问题。 例如,年幼的学生可以讨论一项改变世界的技术,比如电子邮件或手机。 随着他们的进步,他们应该提出澄清细节的问题,以理解一个问题或问题的某一部分是否可以使用计算机运算的方法解决。例如,在尝试编写一个算法来对大量的名字进行排序之前,学生可能会问一些关于名字是如何输入的以及需要什么类型的排序的问题。年龄较大的学生应该识别涉及多个标准和约束的更复杂的问题。最终,学生应该能够识别跨越多个学科的现实世界问题,例如利用新的头盔技术提高自行车的安全性,并且可以通过计算机运算解决。

2. Decompose complex real-world problems into manageable subproblems that could integrate existing solutions or procedures.

2. 将复杂的实际问题拆解为可以集成现有解决方案或步骤的可管理的子问题。

At any grade level, students should be able to break problems down into their component parts. In the early grade levels, students should focus on breaking down simple problems. For example, in a visual programming environment, students could break down (or decompose) the steps needed to draw a shape. As students progress, they should decompose larger problems into manageable smaller problems. For example, young students may think of an animation as multiple scenes and thus create each scene independently. Students can also break down a program into subgoals: getting input from the user, processing the data, and displaying the result to the user. Eventually, as students encounter complex real-world problems that span multiple disciplines or social systems, they should decompose complex problems into manageable subproblems that could potentially be solved with programs or procedures that already exist. For example, students could create an app to solve a community problem that connects to an online database through an application programming interface (API).

在任何年级,学生都应该能够把问题拆解成各个组成部分。 在低年级,学生应该集中精力拆解简单问题。 例如,在可视化编程环境中,学生可以拆解绘制某个形状所需的步骤。 随着学生的进步,他们应该把较大的问题拆解成可处理的较小的问题。 例如,年幼的学生可能认为一个动画是由多个场景组成,因而独立地创建每个场景。学生还可以将一个程序拆解为多个子目标: 从用户那里获取输入、处理数据、向用户显示结果。 最终,当学生遇到跨越多个学科或社会系统的复杂的现实世界问题时,他们应该将复杂的问题拆解成多个有可能被处理的子问题,这些子问题可以通过已经存在的程序或步骤来解决。 例如,学生可以创建一个应用程序来解决一个将应用程序编程接口(API)连接到在线数据库的社区问题。

3. Evaluate whether it is appropriate and feasible to solve a problem computationally.

3. 评估用计算机运算解决一个问题是否合适、可行

After students have had some experience breaking problems down (P3.2) and identifying sub­problems that can be solved computationally (P3.1), they should begin to evaluate whether a computational solution is the most appropriate solution for a particular problem. For example, students might question whether using a computer to determine whether someone is telling the truth would be advantageous. As students progress, they should systematically evaluate the feasibility of using computational tools to solve given problems or subproblems, such as through a cost-benefit analysis. Eventually, students should include more factors in their evaluations, such as how efficiency affects feasibility or whether a proposed approach raises ethical concerns.

当学生有一些拆解问题的经验(P3.2)以及识别可以通过计算机运算解决的子问题的经验(P3.1)之后,他们应该开始评估一个计算机运算解决方案是否是一个特定问题的最合适的解决方案。 例如,学生可能会质疑使用计算机来判断某人是否在说实话是否有优势。 随着学生的进步,他们应该系统地评估使用可计算工具来解决特定问题或子问题的可行性,例如通过成本-收益分析。 最终,学生应该在他们的评估中考虑到更多的因素,比如效率如何影响可行性、或者某个被提议的方法是否会引起伦理问题。

Practice 4. Developing and Using Abstractions

实践4. 建立和使用抽象化


Overview: Abstractions are formed by identifying patterns and extracting common features from specific examples to create generalizations. Using generalized solutions and parts of solutions designed for broad reuse sim­plifies the development process by managing complexity.

概述: 抽象化是通过对具象的例子识别模式、提取共同特征来形成的,是一种泛化处理。使用为广泛的重复使用而设计的通用解决方案和部分解决方案,能够通过管理复杂性来简化开发流程。


By the end of Grade 12, students should be able to


1. Extract common features from a set of interrelated processes or complex phenomena.

1. 从一系列相互关联的过程或复杂现象中提取共同特征

Students at all grade levels should be able to recognize patterns. Young learners should be able to identify and describe repeated sequences in data or code through analogy to visual patterns or physical sequences of objects. As they progress, students should identify patterns as opportunities for abstraction, such as recognizing repeated patterns of code that could be more efficiently implemented as a loop. Eventually, students should extract common features from more complex phenomena or processes. For example, students should be able to identify common features in multiple segments of code and substitute a single segment that uses variables to account for the differences. In a procedure, the variables would take the form of parameters. When working with data, students should be able to identify important aspects and find patterns in related data sets such as crop output, fertilization methods, and climate conditions.

所有年级的学生都应该能够识别模式。年幼的学习者应该能够通过视觉模式或物体的物理顺序的模拟识别和描述重复序列中的数据或编码。 随着他们的进步,学生应该将模式视为抽象化的机会,例如识别重复的代码模式,作为一个循环来执行可以更高效。 最终,学生应该从更复杂的现象或过程中提取共同特征。 例如,学生应该能够识别多段代码中的共同特征,并用变量来替换导致差异的单段代码。 在一个程序中,变量将采用参数的形式。在处理数据时,学生应该能够识别数据的重要方面,并在相关的数据集中找到模式,例如作物产量、施肥方法和气候条件。

2. Evaluate existing technological functionalities and incorporate them into new designs.

2. 评估现有的技术功能,并将其融入新的设计中。

At all levels, students should be able to use well-defined abstractions that hide complexity. Just as a car hides operating details, such as the mechanics of the engine, a computer program’s “move” command relies on hidden details that cause an object to change location on the screen. As they progress, students should incorporate predefined functions into their designs, understanding that they do not need to know the underlying implementation details of the abstractions that they use.

所有年级的学生都应该能够使用定义明确的、隐藏复杂性的抽象化/模式归纳。 正如汽车隐藏其运行细节,比如引擎的结构,计算机程序的“移动”命令依赖于隐藏的细节,这些细节会导致对象在屏幕上改变位置。 随着他们的进步,学生应该将预定义的功能融入到他们的设计中,并理解他们不需要知道自己使用的抽象执行的基本细节。

Eventually, students should understand the advantages of, and be comfortable using, existing functionalities (abstractions) including technological resources created by other people, such as libraries and application programming interfaces (APIs). Students should be able to evaluate existing abstractions to determine which should be incorporated into designs and how they should be incorporated. For example, students could build powerful apps by incorporating existing services, such as online databases that return geolocation coordinates of street names or food nutrition information.

最终,学生应该理解现有功能(抽象化/模式归纳)的优点,并且能够自如地使用它们,包括其他人创建的技术资源,如程序库和应用程序编程接口(api)。 学生应该能够评估现有的抽象,以确定哪些应该融入到设计中,以及如何融入。 例如,学生可以通过合并现有的服务来开发功能强大的应用程序,比如能够返回街道名称值或食品营养信息的地理坐标值的在线数据库。

3. Create modules and develop points of interaction that can apply to multiple situations and reduce complexity.

3. 创建能够应用于多种情况并降低复杂性的程序模块以及交互点

After students have had some experience identifying patterns (P4.1), decomposing problems (P3.2), using abstractions (P4.2), and taking advantage of existing resources (P4.2), they should begin to develop their own abstractions. As they progress, students should take advantage of opportunities to develop generalizable modules. For example, students could write more efficient programs by designing procedures that are used multiple times in the program. These procedures can be generalized by defining parameters that create different outputs for a wide range of inputs. Later on, students should be able to design systems of interacting modules, each with a well-de­fined role, that coordinate to accomplish a common goal. Within an object-oriented programming context, module design may include defining the interactions among objects. At this stage, these modules, which combine both data and procedures, can be designed and documented for reuse in other programs. Additionally, students can design points of interaction, such as a simple user interface, either text or graphical, that reduces the complexity of a solution and hides lower-level implementation details.

在学生有了一些识别模式(P4.1)、拆解问题(P3.2)、使用抽象(P4.2)和利用现有资源(P4.2)的经验之后,他们应该开始积累自己的抽象化/模式归纳。 随着他们的进步,学生应该充分利用开发通用模块的机会。 例如,学生可以通过设计在程序中多次使用的过程来编写更高效的程序。 可以通过定义参数来将这些过程一般化,这些参数使范围广泛的输入有不同的输出。 高年级的学生应该能够设计模块交互的系统,每个模块有一个定义明确的角色,与其它模块协调完成一个共同的目标。 在面向对象程序设计的情境中,模块设计可能包括定义对象之间的交互。 在这个阶段,可以将这些结合了数据和过程的模块进行设计和文档化,以便在其它程序中重用。 此外,学生可以设计交互点,例如简单的用户界面(文本或图形界面) ,这样可以降低解决方案的复杂性,并隐藏较低级别的实现细节。

4. Model phenomena and processes and simulate systems to understand and evaluate potential outcomes.

4. 对现象和过程进行建模对系统进行模拟,以理解和评估可能结果。

Students at all grade levels should be able to represent patterns, processes, or phenomena. With guidance, young students can draw pictures to describe a simple pattern, such as sunrise and sunset, or show the stages in a process, such as brushing your teeth. They can also create an animation to model a phenomenon, such as evaporation. As they progress, students should under­stand that computers can model real-world phenomena, and they should use existing computer simulations to learn about real-world systems. For example, they may use a preprogrammed model to explore how parameters affect a system, such as how rapidly a disease spreads. Older students should model phenomena as systems, with rules governing the interactions within the system. Students should analyze and evaluate these models against real-world observations. For example, students might create a simple producer–consumer ecosystem model using a program­ming tool. Eventually, they could progress to creating more complex and realistic interactions between species, such as predation, competition, or symbiosis, and evaluate the model based on data gathered from nature.

所有年级的学生都应该能够对模式、过程或现象进行表征。 在指导下,年幼的学生可以画出简单模式,如日出和日落,或展示一个过程中的各个阶段,如刷牙。他们也可以创建一个动画来模拟一个现象,比如蒸发。 随着他们的进步,学生应该明白计算机可以模拟现实世界的现象,并能够利用现有的计算机模拟来学习现实世界的系统。 例如,他们可能使用一个预编程模型来研究参数如何影响一个系统,比如疾病的传播速度。高年级学生应该将现象建模为系统,用规则管理系统内的相互作用。 学生应该根据现实世界的观察来分析和评估这些模型。 例如,学生可以使用编程工具创建一个简单的生产者-消费者生态系统模型。 最终,他们可以创建更加复杂和更接近现实的物种之间相互竞争的模型,如捕食、竞争或共生,并根据从自然界收集的数据来对模型进行评估。

Practice 5. Creating Computational Artifacts

实践5. 创造计算制品


Overview: The process of developing computational artifacts embraces both creative expression and the exploration of ideas to create prototypes and solve computational problems. Students create artifacts that are per­sonally relevant or beneficial to their community and beyond. Computa­tional artifacts can be created by combining and modifying existing arti­facts or by developing new artifacts. Examples of computational artifacts include programs, simulations, visualizations, digital animations, robotic systems, and apps.

概述: 开发计算制品的过程包括创造性表达和探索创建原型和解决可计算问题的想法。 学生创造的制品与他们个人有关联,或对他们所处社区或更大范围有益。 可以通过组合和修改现有的制品或者开发新的制品来创造计算制品。 计算制品的例子包括程序、模拟、可视化、数字动画、机器人系统和应用程序。


By the end of Grade 12, students should be able to


1. Plan the development of a computational artifact using an iterative process that includes reflec­tion on and modification of the plan, taking into account key features, time and resource con­straints, and user expectations.

1. 采用迭代开发流程来规划一个计算制品的开发过程,包括对于规划的反思和修改,考虑关键特性、时间和资源限制,以及用户的期望。

At any grade level, students should participate in project planning and the creation of brainstorm­ing documents. The youngest students may do so with the help of teachers. With scaffolding, students should gain greater independence and sophistication in the planning, design, and evaluation of artifacts. As learning progresses, students should systematically plan the develop­ment of a program or artifact and intentionally apply computational techniques, such as decompo­sition and abstraction, along with knowledge about existing approaches to artifact design. Stu­dents should be capable of reflecting on and, if necessary, modifying the plan to accommodate end goals.

在任何年级,学生都应该参与项目规划和头脑风暴文档的创建。 最年幼的学生可以在老师的帮助下做到。在脚手架的帮助下,学生应该在制品的规划、设计和评估中逐渐变得独立自主和富有经验。 随着学习的进展,学生应该系统地规划一个程序或制品的开发,并有意识地应用计算性技术,如拆解和抽象化,以及现有的制品设计方法的知识。 学生应该能够对规划进行反思,并在必要时修改规划以适应最终目标。

2. Create a computational artifact for practical intent, personal expression, or to address a societal issue.

2. 创造一个实用的、可以表达个人思想或解决社会问题的计算制品

Students at all grade levels should develop artifacts in response to a task or a computational problem. At the earliest grade levels, students should be able to choose from a set of given commands to create simple animated stories or solve pre-existing problems. Younger students should focus on artifacts of personal importance. As they progress, student expressions should become more complex and of increasingly broader significance. Eventually, students should engage in independent, systematic use of design processes to create artifacts that solve problems with social significance by seeking input from broad audiences.

所有年级的学生都应该针对一项任务或一个可计算问题开发一些制品。 在低年级阶段,学生应该能够从一组给定的命令中选择命令来创建简单的动画故事或解决已存在的问题。年幼的学生应该把焦点放在对于个人有重要意义的制品上。 随着他们的进步,学生的表达应该变得更加复杂且更具有广泛的意义。 最终,学生应该独立地、系统地使用设计过程,通过寻求广大受众的意见来创造解决具有社会意义的问题的制品。

3. Modify an existing artifact to improve or customize it.

3. 修改一个现有的制品,将其改进或根据用户需求定制。

At all grade levels, students should be able to examine existing artifacts to understand what they do. As they progress, students should attempt to use existing solutions to accomplish a desired goal. For example, students could attach a programmable light sensor to a physical artifact they have created to make it respond to light. Later on, they should modify or remix parts of existing programs to develop something new or to add more advanced features and complexity. For example, students could modify prewritten code from a single-player game to create a two-player game with slightly different rules.

所有年级的学生都应该能够仔细检查现有的制品,以理解它们可以做什么。 随着他们的进步,学生应该尝试使用现有的解决方案来实现预期的目标。 例如,学生可以将一个可编程的光传感器连接到他们所创造的实体制品上,使其对光作出反应。高年级阶段,他们应该修改或重组现有程序的某些部分,以开发新东西或添加更高级的特性和复杂性。 例如,学生可以通过修改单人游戏中预先写好的代码的方式来创造一个规则略有不同的双人游戏。

Practice 6. Testing and Refining Computational Artifacts

实践6. 测试和改进计算制品


Overview: Testing and refinement is the deliberate and iterative process of improving a computational artifact. This process includes debugging (iden­tifying and fixing errors) and comparing actual outcomes to intended out­comes. Students also respond to the changing needs and expectations of end users and improve the performance, reliability, usability, and accessibil­ity of artifacts.

概述: 测试和改进是一个经过深思熟虑的、用来改进一个计算制品的迭代过程。 这个过程包括调试(识别和修复错误)并将实际结果与预期结果进行比较。学生还要响应终端用户不断变化的需求和期望,提高制品的性能、可靠性、可用性和可及性。


By the end of Grade 12, students should be able to


1. Systematically test computational artifacts by considering all scenarios and using test cases.

1. 通过考虑所有使用场景和使用测试用例的方式,对计算制品进行系统测试

At any grade level, students should be able to compare results to intended outcomes. Young students should verify whether given criteria and constraints have been met. As students progress, they should test computational artifacts by considering potential errors, such as what will happen if a user enters invalid input. Eventually, testing should become a deliberate process that is more iterative, systematic, and proactive. Older students should be able to anticipate errors and use that knowledge to drive development. For example, students can test their program with inputs associated with all potential scenarios.

在任何年级,学生都应该能够将实际结果与预期结果进行比较。年幼的学生应核对既定的标准和限制是否达成。随着学生的进步,他们应该通过考虑潜在运行错误来测试计算制品,比如如果用户输入无效输入后会发生什么。最终,测试应该成为一个更具有迭代性、系统性和前瞻性的深思熟虑的过程。较高年级的学生应该能够预见运行错误,并利用这些知识来推动开发。 例如,学生可以用与所有潜在情景相关的输入来测试他们的程序。

2. Identify and fix errors using a systematic process.

2. 使用系统的流程来识别与修复运行错误

At any grade level, students should be able to identify and fix errors in programs (debugging) and use strategies to solve problems with computing systems (troubleshooting). Young students could use trial and error to fix simple errors. For example, a student may try reordering the sequence of commands in a program. In a hardware context, students could try to fix a device by resetting it or checking whether it is connected to a network. As students progress, they should become more adept at debugging programs and begin to consider logic errors: cases in which a program works, but not as desired. In this way, students will examine and correct their own thinking. For example, they might step through their program, line by line, to identify a loop that does not terminate as expected. Eventually, older students should progress to using more complex strategies for identi­fying and fixing errors, such as printing the value of a counter variable while a loop is running to determine how many times the loop runs.

在任何年级,学生都应该能够识别和修复程序中的错误(调试) ,并使用策略来解决计算系统中的问题(故障排除)。 年幼的学生可以通过反复试错来修复简单的运行错误。 例如,学生可能会尝试重新排序程序中的命令序列。 在硬件环境中,学生可以尝试通过重置设备或检查它是否连接到网络来修复设备。 随着学生的进步,他们应该变得更善于调试程序,并开始考虑逻辑错误: 比如,一个程序虽然运行,但不符合预期的运行效果。 通过这种方式,学生可以审查和纠正自己的思考。 例如,他们可能通过逐行审查自己的程序来识别一个不会按预期终止的循环。 最终,高年级的学生应该逐渐使用更复杂的策略来识别和修复运行错误,比如在循环运行时打印出计数器变量的值,以确定循环运行的次数。

3. Evaluate and refine a computational artifact multiple times to enhance its performance, reliability, usability, and accessibility.

3. 多次评估和改进计算制品以增强其性能、可靠性、可用性和可及性。

After students have gained experience testing (P6.2), debugging, and revising (P6.1), they should begin to evaluate and refine their computational artifacts. As students progress, the process of evaluation and refinement should focus on improving performance and reliability. For example, students could observe a robot in a variety of lighting conditions to determine that a light sensor should be less sensitive. Later on, evaluation and refinement should become an iterative process that also encompasses making artifacts more usable and accessible (P1.2). For example, students can incorporate feedback from a variety of end users to help guide the size and placement of menus and buttons in a user interface.

在学生获得测试(P6.2)、调试和修改(P6.1)的经验之后,他们应该开始评估和改进他们的计算制品。随着学生的进步,评估和改进的过程应该着重于提高成绩和可靠性。例如,学生可以在不同的照明条件下观察机器人,以确定光传感器的灵敏度不应该过高。 较高年级阶段,评估和改进应该成为一个包含提升制品的可用性和可及性(P1.2)的迭代过程。 例如,学生可以通过结合来自不同终端用户的反馈来帮助指导用户界面中菜单和按钮的大小和位置。

Practice 7. Communicating About Computing

实践7. 关于计算的交流


Overview: Communication involves personal expression and exchanging ideas with others. In computer science, students communicate with diverse audiences about the use and effects of computation and the appropriate­ness of computational choices. Students write clear comments, document their work, and communicate their ideas through multiple forms of media. Clear communication includes using precise language and carefully consid­ering possible audiences.

概述: 沟通交流包括个人表达和与他人交换想法。 在计算机科学中,学生与不同群体就计算的使用和效果以及计算性选择的适当性进行交流。 学生们写下清晰的评论,记录他们的工作,并通过多种媒体形式交流他们的想法。清晰的沟通包括使用准确的语言和仔细考虑可能的听众。


By the end of Grade 12, students should be able to


1. Select, organize, and interpret large data sets from multiple sources to support a claim.

1. 选择、整理和解释来自多个来源的大型数据集,以支持某项主张。

At any grade level, students should be able to refer to data when communicating an idea. Early on, students should, with guidance, present basic data through the use of visual representations, such as storyboards, flowcharts, and graphs. As students progress, they should work with larger data sets and organize the data in those larger sets to make interpreting and communicating it to others easier, such as through the creation of basic data representations. Eventually, students should be able to select relevant data from large or complex data sets in support of a claim or to communicate the information in a more sophisticated manner.

在任何年级,学生在表达思想时都应该能够参考数据。低年级阶段,学生应该在指导下,通过使用可视化表征形式(如故事板、流程图和图表)来呈现基本数据。 随着学生的进步,他们应该处理更大的数据集,并整理这些较大数据集中的数据,以便更容易地向其他人解释和交流,例如通过创建基本的数据表征形式的方式。 最终,学生应该能够从大型或复杂的数据集中选择相关数据来支持某项主张,或以更复杂的方式交流信息。

2. Describe, justify, and document computational processes and solutions using appropriate termi­nology consistent with the intended audience and purpose.

2. 描述、证明和记录计算性过程和解决方案,使用适合预期听众和目的的术语。

At any grade level, students should be able to talk about choices they make while designing a computational artifact. Early on, they should use language that articulates what they are doing and identifies devices and concepts they are using with correct terminology (e.g., program, input, and debug). Younger students should identify the goals and expected outcomes of their solutions. Along the way, students should provide documentation for end users that explains their artifacts and how they function, and they should both give and receive feedback. For example, students could provide a project overview and ask for input from users. As students progress, they should incorporate clear comments in their product and document their process using text, graphics, presentations, and demonstrations.

在任何年级,学生在设计计算制品时都应该能够谈论自己所做的选择。 低年级阶段,他们应该使用能够清晰表达他们正在做什么的语言,并在识别他们正在使用的设备和概念时使用正确的术语(例如,程序、输入和调试)。低年级学生应该明确他们的解决方案的目标和预期结果。 接着,学生应该为最终用户提供文档,解释他们的制品以及它们如何工作,并且他们应该能够提供和接收反馈。 例如,学生可以提供一个项目概述,并向用户寻求信息。 随着学生的进步,他们应该在他们的产品中融入清晰的评论,并使用文本、图形、展示和演示来记录他们的过程。

3. Articulate ideas responsibly by observing intellectual property rights and giving appropriate attribution.

3. 负责任地阐述想法,遵守知识产权,并恰当地标注来源。

All students should be able to explain the concepts of ownership and sharing. Early on, students should apply these concepts to computational ideas and creations. They should identify instances of remixing, when ideas are borrowed and iterated upon, and give proper attribution. They should also recognize the contributions of collaborators. Eventually, students should consider common licenses that place limitations or restrictions on the use of computational artifacts. For example, a download­ed image may have restrictions that prohibit modification of an image or using it for commercial purposes.

所有学生都应该能够解释所有权和分享的概念。 低年级阶段,学生应该将这些概念应用到计算性想法与创作中。 他们应该识别合成的例子,当借用和迭代想法时,应该恰当地标明出处。 他们还应该承认合作者的贡献。 最终,学生应该考虑到对使用计算制品施加限制规定的通用许可证。 例如,下载的图像可能有禁止修改图像或将其用于商业目的的限制。