ct0.jpgWhat is Computational Thinking?


Getting Started

The essence of computational thinking is thinking about data and ideas, and using and combining these resources to solve problems. Teachers can encourage students to “think computationally” by moving technology projects beyond “using” tools and information toward “creating” tools and information. The creation of tools and new information requires thought processes about manipulating data, using abstractions, and lots of computer science concepts. To encourage computational thinking in the classroom teachers must ask different questions related to problem solving and the use of technology. They must ask:

  • What are the power and limit of human and computer intelligence?
  • How difficult is the problem?
  • How can it be solved?
  • How can technology be applied to the problem?
  • What computational strategies might be employed?

Because simulations can encourage students to think about data and ideas, and about using and combining data and ideas to solve problems, simulations are helpful to engage students in computational thinking. Simulations that encourage students to think computationally often require a mathematical representation of the problem– like a story problem, and mental modeling with the symbols and processes of other disciplines. Computational thinking is a required skill for 21st Century success which teachers can foster using subject-specific simulations and modeling. Learning activities that allow students to discover and explain scientific relationships, predict events, and learn procedural skills will enable them to better understand these subjects, to predict behavior, and to build computational thinking skills.

What is Computational Thinking?

  • C.T. is thinking recursively.
  • C.T. is reformulating a seemingly difficult problem into one which we know how to solve. Reduction, embedding, transformation, simulation
  • C.T. is choosing an appropriate representation or modeling the relevant aspects of a problem to make it tractable.
  • C.T. is interpreting code as data and data as code.
  • C.T. is using abstraction and decomposition in tackling a large complex task.
  • C.T. is judging a system’s design for its simplicity and elegance.
  • C.T. is type checking, as a generalization of dimensional analysis.
  • C.T. is prevention, detection, and recovery from worst-case scenarios through redundancy, damage containment, and error correction.
  • C.T. is modularizing something in anticipation of multiple users and prefetching and caching in anticipation of future use.
  • C.T. is calling gridlock deadlock and avoiding race conditions when synchronizing meetings.
  • C.T. is using the difficulty of solving hard AI problems to foil computing agents.
  • C.T. is taking an approach to solving problems, designing systems, and understanding human behavior that draws on concepts fundamental to computer science.

Simple Daily Examples

Earlier this summer, there was an interesting post by Mark Guzdial on computational thinking: Go to the Data: Two stories of (really) Computational Thinking.

  • Looking up a name in an alphabetically sorted list
– Linear: start at the top
– Binary search: start in the middle
  • Standing in line at a bank, supermarket, customs & immigration
– Performance analysis of task scheduling
  • Putting things in your child’s knapsack for the day
– Pre-fetching and caching
  • Taking your kids to soccer, gymnastics, and swim practice
– Traveling salesman (with more constraints)
  • Cooking a gourmet meal
– Parallel processing: You don’t want the meat to get cold while you’re cooking the vegetables.
  • Cleaning out your garage
– Keeping only what you need vs. throwing out stuff when you run out of space.
  • Storing away your child’s Lego pieces scattered on the LR floor
– Using hashing (e.g., by shape, by color)
  • Doing laundry, getting food at a buffet
– Pipelining the wash, dry, and iron stages; plates, salad, entrée, dessert stations
  • Even in grade school, we learn algorithms (long division, factoring, GCD, …and abstract data types (sets, tables, …).