Developing fluency with computational concepts, practices, and perspectives

What is computational thinking?

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).

Other Definitions and Inspirations

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/0013189x12463051
  • 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