Jeannette Wing on Computational Thinking


Tonight is Jeannette Wing's general interest talk as part of her Organick Memorial Lecture at the University of Utah. The talk is on computational thinking. Here's an article she wrote for ACM Communications. These slides are close to the ones she used tonight.

Computational thinking will be a fundamental skill, like reading, writing, and arithmetic, in the 21st century. Computational thinking enables what one person cannot do alone. There are two components: abstraction and automation. CT involves thinking at more than one layer of abstraction at a time. Automation mechanizes the abstraction layers and their relationship. These allow the ability and audacity to scale.

She goes over several examples of computational thinking including how difficult is a problem, thinking recursively, reforming problems, interpreter code as data and data as code, using abstraction and decomposition, type checking, understanding sychronization, understanding pre-fetching and caching. In short "CT is taking an approach to solving problems, designing systems, and understanding human behavior that draws on concepts fundamental to computer science."

Computational thinking is revolutionizing statistics--some schools put the statistics department in the school of computing. Computation is the big bet in biology. CT influences economics (game theory), chemistry (nanocomputing), and physics (quantum computing).

But computational thinking isn't just for scientists. It's for everyone.

CT is conceptualizing, not programming. CT is how humans think about computing. CT is a fundamental skill, one that every human being needs to understand to function in modern society. CT complements and combing mathematical and engineering thinking. It draws on mathematics, but is constrained by the machine. It draws on engineering, but builds virtual worlds unconstrained by physical reality.

CT is about the ideas and not the artifacts. Computing is engaging and challenging. It's not just programming. One can major in computer science and anything--just like English, political science, or mathematics.

Jeannette goes through a number of examples of research problems in other fields that are computationally based, including examples from biology chemistry, geology, astronomy, brain science, mathematics, and engineering. Beyond the sciences, she gives examples in economics, social sciences, law, and entertainment. See her slides for details.

Universities should start with freshman-level intro courses by teaching how to think like a computer scientist (aka Principles of Computing), rather than "intro to programming." The K-12 curricula needs to be reformed as well. This has to be a collective effort.

Don't stop at the freshman year. Upper-division courses and graduate-level courses are needed as well. CMU has a program called CS4All to reach high school teachers and counselors and show them that there's much more to computer science than programming.

What could be in such a course?

  • Thinking recursively
  • Thinking abstractly (e.g. data abstraction and representation shows layers)
  • Thinking ahead (caching, pre-fetching)
  • Thinking procedurally
  • Thinking logically
  • Thinking concurrently
  • and so on...

Paper and pencil as well as programming exercises. She discusses some topics along with how they could be explained by every day activities: sorting and searching, intractability, computational size, undecidability, data as code and code as data, correctness, caching, pipelining, concurrency, and distributed computing.

Some additional ideas came up in the Q&A session: privacy and fallibility.

She finished by talking about some deep questions of computer science and with a call to action: spread the word.

A few interesting links: