Monday, March 06, 2006

Computational Thinking

In this month's CACM, CMU Chair Jeannette Wing wrote a neat Viewpoint column Computational Thinking (with related slides). In the article she argues that many of the techniques we use to reason about computation apply to much wider range of problems. She gives many aspects of computational thinking such as
Computational thinking is using abstraction and decomposition when attacking a large complex task or designing a large complex system. It is separation of concerns. It is choosing an appropriate representation for a problem or modeling the relevant aspects of a problem to make it tractable. It is using invariants to describe a system's behavior succinctly and declaratively. It is having the confidence we can safely use, modify, and influence a large complex system without understanding its every detail. It is modularizing something in anticipation of multiple users or prefetching and caching in anticipation of future use.
Wing goes out of her way to separate computational thinking from thinking about computers.
Computational thinking is a way humans solve problems; it is not trying to get humans to think like computers. Computers are dull and boring; humans are clever and imaginative. We humans make computers exciting. Equipped with computing devices, we use our cleverness to tackle problems we would not dare take on before the age of computing and build systems with functionality limited only by our imaginations.
Jeannette Wing makes a strong case that computational thinking should be as important a part of the learning experience as the three R's, though in CACM she preaches to the choir. She suggests that computer science professors teach a course "Ways to Think Like a Computer Scientist." But how do we convince students they should take it?


  1. It occurs to me that this description better applies to physics than to computer science...

  2. But how do we convince students they should take it?

    There is a first-year class at CMU that sounds sort of like this now, "The Great Theoretical Ideas of Computer Science." How to get students to take it? Serve pancakes, do magic tricks, shoot marshmallows at the audience at high velocity.

  3. It occurs to me that this description better applies to physics than to computer science...

    This is in general applicable to any science. The main point is that it is time for people to adapt thinking from CS.

  4. One answer to how to get students to take it is to have it satisfy a requirement. Harry Lewis teaches a course, "Bits" at Harvard that talks about CS for non-majors. The course satisfies a "quantitative reasoning" requirement for undergraduates. I haven't had a chance to ask anyone how the course went, but the syllabus certainly looks like it covers the kind of computational thinking discussed here.

  5. The idea of Procedural Thinking has been around for a long time. I think it is inherent to learning computer science.

    I like the term "Computational Thinking" because it is more broad-based and includes Porcedural thinking.