This page originally authored by Ben Cooperman and Chet Garber
Computational Thinking (CT) is a set of thinking skills generally used to create computer programs to solve specific problems. The skills can be used as a method of general problem solving and are promoted by some educators and researchers as necessary to help students move to higher levels of thinking and reasoning.
What Is Computational Thinking?
According to Jeanette Wing
The primary contemporary researcher promoting the use of CT is Jeanette Wing, from the Center for Computational Thinking at Carnegie Mellon University in Pittsburgh, PA. She defines it as "the thought processes involved in formulating problems and their solutions so that the solutions are represented in a form that can be effectively carried out by an information-processing agent. 
She further states, "Computational Thinking involves solving problems, designing systems, and understanding human behavior, by drawing on the concepts fundamental to computer science. Computational thinking includes a range of mental tools that reflect the breadth of the field of computer science." 
According to ISTE
The International Society for Technology in Education includes specific skills in their Operational Definition for K-12 Education:
Computational thinking (CT) is a problem-solving process that includes (but is not limited to) the following characteristics:
- Formulating problems in a way that enables us to use a computer and other tools to help solve them.
- Logically organizing and analyzing data
- Representing data through abstractions such as models and simulations
- Automating solutions through algorithmic thinking (a series of ordered steps)
- Identifying, analyzing, and implementing possible solutions with the goal of achieving the most efficient and effective combination of steps and resources
- Generalizing and transferring this problem solving process to a wide variety of problems
These skills are supported and enhanced by a number of dispositions or attitudes that are essential dimensions of CT. These dispositions or attitudes include:
- Confidence in dealing with complexity
- Persistence in working with difficult problems
- Tolerance for ambiguity
- The ability to deal with open ended problems
- The ability to communicate and work with others to achieve a common goal or solution
The Role of the Computer
Educational programming languages such as BASIC (1964) and PASCAL (1970), although intended to simplify the process of programming and make it available to a wider audience, were focused on preparing students to become programmers. The LOGO (1967) programming language on the other hand, created by Seymour Papert and Wally Feurzeig, was designed as a Constructivist teaching tool with the intention of teaching problem-solving skills to children.  It gave informative error messages and implemented virtual 'turtles' that provided immediate visual feedback and simplified the process of debugging. This allowed for abstract concepts to be made more concrete as students created animations and games and worked with variables, and Cartesian geometry. They could make simple modifications to their programs on the fly to see how changing values would render the program differently.
Papert believed that by working with computers, (particularly using LOGO), users would develop problem solving skills that would accelerate the development of their formal thinking processes.  Computational Thinking places the computer, therefore, as a tool to aid the development of thinking processes.
How can Learners benefit from Computational Thinking?
Relation to Project-Based Learning
Papert's 'Constructionism' examines the process of 'building knowledge structures' that is central to Constructivism but adds that this happens "especially felicitously in a context where the learner is consciously engaged in constructing a public entity."  Similarly, CT emphasizes project-based learning which provides authentic, real world contexts for learning and allows students to recognize connections between various subject areas.
Higher Order Thinking Skills
Bloom's Taxonomy illustrates that teaching a task to someone else represents a higher order level of thinking than simply performing the task oneself since this requires not only application of the learned material, but some analysis and evaluation as well to ensure that the most important elements are being taught and in the right sequence. . A revised version (2001), adds a new category, Creating and puts it at the top of the list. This category includes the following "higher order thinking skills": designing, constructing, planning, producing, inventing, devising, making, all of which are common to the sorts of tasks used to teach CT. 
Non-Computer Applications of CT
Pipelining: In computing, a pipeline is formed when one event depends upon the output of the one before. Planning an assembly line takes pipeline thinking, to insure flow of product. Event planners do pipeline thinking when they try to maintain efficiency during the event. Teachers do pipeline thinking when they plan progression through a unit, to insure that students have the proper background when leaving one section to go on to another.
From Jeannette Wing: "Seth Goldstein, associate professor of computer science, once remarked to me that most buffet lines could benefit from computational thinking: “Why do they always put the dressing before the salad? The sauce before the main dish? The silverware at the start? They need some pipeline theory.”
Hashing:Hashing is assigning a code or label to data to allow its more rapid uptake and delivery. One hashes when they file papers or files into a folder for later retrieval. Storing nuts and bolts in proper sections and bins is also hashing.
"After giving a talk at a department meeting about computational thinking, Professor Danny Sleator told me about a hashing function his children use to store away Lego blocks at home. According to Danny, they hash on several different categories: rectangular thick blocks, other thick (non-rectangular) blocks, thins (of any shape), wedgies, axles, rivets and spacers, “fits on axle,” ball and socket and “miscellaneous.” They even have rules to classify pieces that could fit into more than one category. “Even though this is pretty crude, it saves about a factor of 10 when looking for a piece,” Danny says. Professor Avrim Blum overheard my conversation with Danny and chimed in “At our home, we use a different hash function.” 
Sorting: From Wing again, "The following story is taken verbatim from an email sent by Roger Dannenberg, associate research professor of computer science and professional trumpeter. “I showed up to a big band gig, and the band leader passed out books with maybe 200 unordered charts and a set list with about 40 titles we were supposed to get out and place in order, ready to play. Everyone else started searching through the stack, pulling out charts one-at-a-time. I decided to sort the 200 charts alphabetically O(N log(N)) and then pull the charts O(M log(N)). I was still sorting when other band members were halfway through their charts, and I started to get some funny looks, but in the end, I finished first. That’s computational thinking.” 
How can Computational Thinking be taught in schools?
Primarily, teaching of CT skills in schools are done through Robotics and Programming classes. Educators tend to place emphasis on problem- or challenge-based learning tasks to encourage students to solve problems on their own rather than through direct instruction methods. Computational Thinking stresses an iterative process to problem-solving where students incrementally improve an idea through a cycle of developing theories, testing them and refining them. Classes in which students program information into computers to solve problems are particularly well-suited to this process since users can test programs, make modifications, then run them again to see how the changes play out, emphasizing the learning of the CT processes.
Several computer programs are in use in schools today that teach children the fundamentals of computer algorithms in the process of program creation and problem solving. Learners now are making use of visual programming languages. These programs remove the difficulties typing code by introducing code 'blocks' that can be dragged and dropped into place. Each block represents a command and since students don't type the commands manually, this removed many of the problems encountered by users who make simple errors with syntax. This allows younger students to program computers.
Scratch is a visual programming language developed by the Lifelong Kindergarten Group at MIT. It is a visual, block-based, computer programming language editor. The code used in Scratch does not use text. It uses puzzle-like pieces. Because of the lack of text errors (syntax errors), the learning process is much less frustrating and therefore, easier to learn. It boasts millions of users worldwide and lowers the bar to allows for the easy creation of interactive multimedia projects and games.
eToys is a "media-rich authoring environment and visual programming system" that teaches basic programming skills and allows users to create a remarkable variety of interactive content using predefined code blocks.
Greenfoot is a project out of the University of Kent. It is an interactive Java development environment designed primarily for educational purposes at the high school and undergraduate level. It allows easy development of two-dimensional graphical applications, such as simulations and interactive games.
Alice is a 3D programming environment developed at Carnegie Mellon University for introducing students to object-oriented programming concepts. It allows for the creation of digital stories, animations or interactive games. It is similar to Scratch in the way that users drag-and-drop blocks into place to create programs.
BlueJ is an integrated Java environment designed for introductory teaching. It can be extended with with add-ons such as Env3D to allow for additional functionality, such as programming 3D objects.
Processing is an open-source programming language and environment targeted at artists and designers who want to create images, animations and interactions. Projects can be exported as double-clickable applications or embedded into webpages.
Python is an open source, object-oriented programming language that runs on a variety of operating systems. With it's relatively simple syntax, it has become a popular choice as an introduction to programming.
ContextFree is a program that generates beautiful, organic images from written instructions. Users can program factors of randomness to allow for infinite variations of your artwork each time it is executed.
Daisy the Dinosaur borrows from the block-based visual programming languages to bring programming concepts to an even younger audience. It teachers the basics of sequencing, loops, events and objects using a simple drag-and-drop interface as children solve a series of challenges. Daisy the Dinosaur runs exclusively on the iPad.
LEGO Mindstorms kits allow users to create small, customizable, robots that can be programmed using the included software. The kits include LEGO parts from the LEGO Technics product line, a programmable microprocessor 'Brick', various sensors and software that includes a visual programming language that makes for an easy introduction to programming.
Arduino is an open-source electronics prototyping platform based on flexible, easy-to-use hardware and software. It's intended for artists, designers, hobbyists, and anyone interested in creating interactive objects or environments.
The TangibleK research project was an interdisciplinary, NSF-funded project that focused on introducing computer programming and robotics to young children.
The spirit behind Computational Thinking theory can be illustrated by the following quotation by Leo Cherne, American economist, public servant and commentator:
"Computers are incredibly fast, accurate and stupid. On the other hand, a well trained operator, as compared with a computer; is incredibly slow, inaccurate and brilliant. Together they are powerful beyond all imagination." -- Leo Cherne
Stop Motion Animation
- ↑ Jan Cuny, Larry Snyder, and Jeannette M. Wing, “Demystifying Computational Thinking for Non-Computer Scientists,” work in progress, 2010
- ↑ Wing, J. (2006). Computational Thinking. Communications of the ACM, 49(issue 3), 33-35.
- ↑ 3.0 3.1 http://www.iste.org/Libraries/CT_Documents/Computational_Thinking_Operational_Definition_flyer.sflb.ashx
- ↑ 4.0 4.1 Papert, S. (1980). Mindstorms: Children, computers, and powerful ideas. New York: Basic Books.
- ↑ Harel, I. Papert, S. (1991) 'Constructionism.' Norwook, NJ: Ablex Publishing.
- ↑ Hubweiser, P. (2008). In Maciej Syslo (Chair). Analysis of learning objectives in object oriented programming.. In Mittermeir, R.T. and Syslo, M.M. (Eds.), Informatics education - supporting computational thinking (pp. 142-150). Berlin: Springer Verlag.
- ↑ http://en.wikipedia.org/wiki/Pipeline_(computing)
- ↑ 8.0 8.1 8.2 Wing, J. (2011). Research notebook: Computational thinking-what and why. The link, Spring 2011.
- ↑ http://en.wikipedia.org/wiki/Hash_function
In this video, Jeannette Wing explains why she feels that Computational Thinking will be a fundamental skill used by everyone in the world by the middle of the 21st century. http://www.youtube.com/watch?v=C2Pq4N-iE4I
Google has embraced the cause of CT, promoting its inclusion in schools with a website including ready-made resources, lesson plans, and discussion forums for educators to utilize in their classrooms. http://www.google.com/edu/computational-thinking/
Microsoft has published a collection of resources to promote CT in a variety of classroom subjects. https://docs.google.com/viewer?url=http%3A%2F%2Feducation.sdsc.edu%2Fresources%2FCompThinking.pdf
ISTE has published an operational definition of Computational Thinking for use in the K-12 classroom. http://www.iste.org/Libraries/CT_Documents/Computational_Thinking_Operational_Definition_flyer.sflb.ashx
Mark Guzdial, a professor in the School of Interactive Computing at Georgia Institute of Technology maintains a regular blog about 'Computing Education' that regularly discusses issues related to CT. http://computinged.wordpress.com/
Here is the Wikipedia entry for Computational Thinking. http://en.wikipedia.org/wiki/Computational_thinking
The first appearance of the term 'Computational Thinking' was in "An Exploration in the Space of Mathematics Educations" by Seymour Papert in 1996. http://www.papert.org/articles/AnExplorationintheSpaceofMathematicsEducations.html
Center for Computational Thinking can be found in Carnegie Mellon University in Pittsburgh, Pa. Five people are current members of the organization: the two-member steering committee of Roy Levin and Harold Javid from Microsoft, a webmaster and an executive assistant, and Jeannete Wing.
This article compares the original version of Bloom's Taxonomy with a revision that was published in 2001 by a former student Bloom, Lorin Anderson and David Krathwohl. http://projects.coe.uga.edu/epltt/index.php?title=Bloom%27s_Taxonomy#Revised_Bloom.27s_Taxonomy_.28RBT.29