2-Pane Combined
Full Summaries Sorted

Computational Thinking with Scratch: Developing Fluency with Computational Concepts, Practices, and Perspectives

Author: Karen Brennan, Michelle Chung, Wendy Martin, Francisco Cervantes, Bill Tally, and Mitch Resnick

Brennan, Karen, et al. “Computational Thinking with Scratch: Developing Fluency with Computational Concepts, Practices, and Perspectives.” Computational Thinking with Scratch,,

Computational thinking has received considerable attention over the past several years, but there are many perspectives on what computational thinking entails. We are interested in the ways that design-based learning activities — in particular, programming interactive media — support the development of computational thinking in young people. This site and its collection of instruments are designed for K-12 educators and researchers interested in supporting and assessing the development of computational thinking through programming.

This site is the product of a collaboration between researchers from the Creative Computing Lab at the Harvard Graduate School of Education (Karen Brennan, Michelle Chung) and researchers at EDC’s Center for Children and Technology (Wendy Martin, Francisco Cervantes, Bill Tally). Mitch Resnick of the MIT Media Lab also contributed to this work — in particular, to the development of the computational thinking framework. Thanks also to Harvard Graduate School of Education Master’s students Aaron Morris and Mylo Lam, who assisted in coding of the student interviews.

This material is based upon work supported by the National Science Foundation under Grant No. DRL-1019396. Any opinions, findings, and conclusions or recommendations expressed in this material are those of the author(s) and do not necessarily reflect the views of the National Science Foundation.


Over the past five years, we have developed a computational thinking framework based upon our studies of interactive media designers. The context of our research is Scratch — a programming environment that enables young people to create their own interactive stories, games, and simulations, and then share those creations in an online community with other young programmers from around the world. By studying activity in the Scratch online community and in Scratch workshops, we have developed a definition of computational thinking that involves three key dimensions: (1) computational concepts, (2) computational practices, and (3) computational perspectives. Observation and interviews have been instrumental in helping us understand the longitudinal development of creators, with participation and project portfolios spanning weeks to several years. Workshops have been an important context for understanding the practices of the creator-in-action.


As young people design interactive media with Scratch, they engage with a set of computational concepts that are common in many programming languages. We have identified seven concepts, which are highly useful in a wide range of Scratch projects, and which transfer to other programming (and non-programming) contexts:

  • sequence: identifying a series of steps for a task
  • loops: running the same sequence multiple times
  • parallelism: making things happen at the same time
  • events: one thing causing another thing to happen
  • conditionals: making decisions based on conditions
  • operators: support for mathematical and logical expressions
  • data: storing, retrieving, and updating values


From our interviews with and observations of young designers, it was evident that framing computational thinking solely around concepts insufficiently represented other elements of designers’ learning and participation. The next step in articulating our computational thinking framework was to describe the processes of construction, the design practices we saw kids engaging in while creating their projects. Although the young people we interviewed had adopted a variety of strategies and practices for developing interactive media, we observed four main sets of practices:

  • experimenting and iterating: developing a little bit, then trying it out, then developing more
  • testing and debugging: making sure things work — and finding and solving problems when they arise
  • reusing and remixing: making something by building on existing projects or ideas
  • abstracting and modularizing: exploring connections between the whole and the parts


In our conversations with Scratchers, we heard young designers describe evolving understandings of themselves, their relationships to others, and the technological world around them. This was a surprising and fascinating dimension of participation with Scratch — a dimension not captured by our framing of concepts and practices. As the final step in articulating our computational thinking framework, we added the dimension of perspectives to describe the shifts in perspective that we observed in young people working with Scratch, which included three elements:

  • expressing: realizing that computation is a medium of creation, “I can create.”
  • connecting: recognizing the power of creating with and for others, “I can do different things when I have access to others.”
  • questioning: feeling empowered to ask questions about the world, “I can (use computation to) ask questions to make sense of (computational things in) the world.”

Description and definitions of the concepts, practices, and perspectives are available in this one-page handout. For more information about the development of the CT framework, please explore this AERA 2012 conference paper or this series of webinars (concepts, practices, perspectives).


Many people are contributing to the conversations about computational thinking — what it is and how to support its development in young learners. Here are a just few of the many resources that we have found helpful. If you have resources that you would like added to this list, please contact us.

  • 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(1), 48- 54.
  • Cuny, J., Snyder, L., & Wing, J.M. (2010). Demystifying computational thinking for non-computer scientists. Unpublished manuscript in progress, referenced in
  • Google. (n.d.) . Exploring computational thinking.
  • Grover, S., & Pea, R. (2013). Computational thinking in K–12: A review of the state of the field. Educational Researcher, 42(1), 38-43. doi: 10.3102/0013189×12463051
  • Guzdial, M. (2008). Education: Paving the way for computational thinking. Commun. ACM, 51(8), 25-27. doi: 10.1145/1378704.1378713
  • Lee, I., Martin, F., Denner, J., Coulter, B., Allan, W., Erickson, J., Malyn-Smith, J., Werner, L. (2011). Computational thinking for youth in practice. ACM Inroads, 2(1), 32-37. doi: 10.1145/1929887.1929902
  • National Research Council. (2010). Report of a workshop on the scope and nature of computational thinking. Washington, DC: National Academies Press.
  • National Research Council. (2011). Report of a workshop on the pedagogical aspects of computational thinking. Washington, DC: National Academies Press.
  • Shein, E. (2014). Should everybody learn to code? Commun. ACM, 57(2), 16-18. doi: 10.1145/2557447
  • Vee, A. (2013). Understanding computer programming as a literacy. Literacy in Composition Studies, 1(2), 42-64.
  • Wing, J.M. (2006). 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 A: Mathematical, Physical and Engineering Sciences, 366(1881), 3717-3725. doi: 10.1098/rsta.2008.0118


There are different strategies for assessing the development of computational thinking. In our work, we have relied primarily on three approaches: (1) artifact-based interviews, (2) design scenarios, and (3) learner documentation. Using these approaches, we have particularly focused on evolving familiarity and fluency with the computational thinking practices. The focus on practices emerged through work with young learners — realizing that most concept-oriented assessments (e.g., checking for the presence of particular blocks in a projects as indicators of concept fluency, quizzes about definitions of concepts) were insufficient in representing a learner’s development as a “computational thinker”. Knowing the definition of a concept was not useful if unaccompanied by familiarity and fluency with computational practices to put the concepts into action within a particular creation.


In this approach, learners are engaged in conversation about their computational products and practices, using work samples to guide the conversation.

Our interview protocol involves several categories of questions (defining Scratch, providing feedback, solving problems, and developing projects) at three different moments in time (after first introduction to Scratch, at the mid-point of the learning experience, and as part of culminating activities).

Our rubric for assessing evolving fluency with computational practices elaborates the four practices (experimenting and iterating, testing and debugging, reusing and remixing, and abstracting and modularizing) and offers possible indicators of low, medium, and high levels of proficiency. These indicators are also illustrated in the “Practices in Practice” videos shared in the section below.


In this approach, learners encounter a series of projects and engage with those projects from four different perspectives: critiquing, extending, debugging, and remixing.

We developed three sets of Scratch projects of increasing complexity, all available in this studio in the Scratch online community. Within each set, there are two projects; the projects engage the same concepts and practices, but have different aesthetics to appeal to different interests.

In a series of three encounters, students are presented with the design scenarios, which are framed as projects that were created by another young Scratcher. The students are then asked to select one of the projects from each set, and (1) explain what the selected project does, (2) describe how it could be extended, (3) fix a bug, and (4) remix the project by adding a feature.


In this approach, learners are engaged in developing reflective traces of their learning, as accompaniment to their Scratch creations.

Here, we share three possible examples of reflective work by learners. As a first example, learners could maintain a journal, either paper-based or digital (such as this online Google presentation document). Potential prompts for journal reflections are available in the Creative Computing curriculum guide and in this computational thinking practices journal, which includes sample student responses.

As a second example, learners could annotate their code using Scratch’s built-in commenting feature, explaining design and implementation decisions. As a third example, learners could use screen capture software to provide a visual walk-through of their work, narrating their observations and intentions.


We developed a set of videos to illustrate our rubric for assessing evolving fluency with computational practices. Examples from elementary school, middle school, and high school are provided for each of the four computational thinking practices (experimenting and iterating, testing and debugging, remixing and reusing, abstracting and modularizing).


















Although students may spontaneously encounter concepts or formulate practices while designing interactive media, student learning will be deeper if meaningfully scaffolded and supported. A key design principle underlying our approach to supporting the development of computational thinking is to intentionally create opportunities for learners to engage with computational concepts, practices, and perspectives.

When designing learning environments, we encourage a balance between structure and freedom. Young learners can benefit from support, provided that this support does not come at the expense of freedom in design and exploration. We encourage making connections both to the big ideas of computational thinking and to learners’ interests and passions. To support seeking this balance, we offer two resources: (1) the Creative Computing curriculum guide, and (2) a self-reflective instrument.


To support computational thinking in the classroom, we developed the Creative Computing curriculum guide. The guide is a collection of ideas, strategies, and activities for an introductory creative computing experience using the Scratch programming language. The activities are designed to support familiarity and fluency with computational creativity and computational thinking, through creative design activities, playful challenges, and reflective design journal prompts. Explore the ScratchEd online community for additional computational thinking resources.


Independent of the particular activities used in a learning environment, our self-reflective instrument can be employed by educators, designers, and researchers to critically examine if (and how) computational practices (experimenting and iterating, testing and debugging, remixing and reusing, modularizing and abstracting) are being encouraged. This reflective tool can be used to think about activities in a K-12 classroom, a library, or another type of setting — any context in which learners are engaged in the design of interactive media.

This work is licensed under a Creative Commons Attribution-ShareAlike 4.0 International License.

DMU Timestamp: July 12, 2021 17:15

0 comments, 0 areas
add area
add comment
change display
add comment

Quickstart: Commenting and Sharing

How to Comment
  • Click icons on the left to see existing comments.
  • Desktop/Laptop: double-click any text, highlight a section of an image, or add a comment while a video is playing to start a new conversation.
    Tablet/Phone: single click then click on the "Start One" link (look right or below).
  • Click "Reply" on a comment to join the conversation.
How to Share Documents
  1. "Upload" a new document.
  2. "Invite" others to it.

Logging in, please wait... Blue_on_grey_spinner