« Email Netiquette | Main | Just What is Computer Science? »

What is Computational Thinking

In the March 2006 issue of the Communications of the ACM, Jeannette Wing generated a significant response with her article on Computational Thinking. One of the significant impacts of this article was placing the phrase "Computational Thinking" into the common language (at least of academics). Reading through the article, it seems to me that Wing never directly defines this term. Having heard her give a couple of talks on her article, however, I have seen her give an actual definition of Computational Thinking. Paraphrasing from her slides, Wing has defined Computational Thinking as the process of abstraction. (Wing provides several engineering aspects of the term, but I think that "the process of abstraction" is what Wing intends Computational Thinking to be.)

As a computer scientist, this was an acceptable definition for me. While having lunch the other day with an engineer and a biologist, I shared this definition with them. Both of them hated this definition, feeling that it was too "computer science-y" of a definition, and not one off of which they could work.

Since Computational Thinking in K-12 should probably apply to other STEM (Science, Technology, Engineering, and Mathematics) disciplines, and probably to all other disciplines, any reasonable definition of Computational Thinking needs to appeal to faculty in other disciplines. I haven't yet come up with a satisfactory external definition of Computational Thinking, and wanted to get others' thoughts of a definition, one that will at least appeal to biologists, and engineers (and hopefully teachers in other disciplines as well)....

Steve Cooper
CSTA Vice-President

Comments

I'm not sure that I've formulated a functional definition of "computational thinking" yet, though I feel like I have a working sense of what it is. My working sense includes phrases like "habits of mind" and "logical thinking."

The question reminds me of the one that preceded it, "What is computer science?" The definition I hit upon this summer that seems to work better for my students than anything including "algorithm," "abstraction," or any other fancy words, is "computer science is turning ideas into something a computer can do."

I had to pitch this at a faculty meeting when we were trying to push for a computer science graduation requirement at the Laboratory Schools in Chicago.

I believe I borrowed a different idea from the Wing article. I like to think of Computational Thinking as the ability to see, comprehend and devise systems and processes.

For me this includes dealing with abstractions. What do we do as computer scientists but devise and organize systems of information, and then devise processes to do things with it?

The ability to devise a system for information is what makes digital data representation possible. As soon as someone came up with a way to represent, say, sound as a big list of numbers then presto! computation with sound becomes possible. Part of what we do as a computer scientists is try to figure out how to represent natural phenomena and information as data - in other words, "abstracting" the information and data from nature. Doing so requires coming up with a system and rules about what that data means and how it should be organized. Physics and mathematics do this to some degree, but the data they abstract is very restricted to a.) numbers, and b.) equations. They cannot deal with data like words, or images. What's your equation for counting the number of times the word "the" appears in Shakespeare's collected works? Statisticians, though, have had to deal with problems like this for a long time - I think that they are the closest thing to computational thinkers outside of computer science.

The ability to see a solution to a problem as a *process* is what makes all computation possible. To put it another way, if you have some ingenious solution to a problem but can't explain it as a process (read: algorithm) then you DON'T have a computational solution.

So, Computational Thinking is about developing and maturing our ability to see world in terms of systems and processes.
This ability is of increasing importance because computation has "invaded" so many other fields. It's also important in its own rite as a useful way to think about complex problems of a particular nature.

I try to resist the bait of explaining how computational thinking is useful to your "daily life." It is and it isn't. How important is learning about the war of 1812 to your daily life? It's not that historical event itself that's important, but it's the kind of thinking that goes into understanding that historical event - the "doing" of history: research, reading, understanding the causes and outcomes and context in which the event occurred - that's useful.

Computational thinking is the same way. The practice of computer science, the doing of it, is a useful ability to have that can be applied in a variety of contexts where appropriate. There are many situations in which a computational solution is appropriate and many in which it is not. How can you make an intelligent choice or have an intelligent opinion (about a computational or technological issue) without some education in this mode of thinking?

So that's how I put it to people.

Post a comment

(If you haven't left a comment here before, you may need to be approved by the site owner before your comment will appear. Until then, it won't appear on the entry. Thanks for waiting.)