CSD Home | Important Links | SCS Admin Services | SCS Home

 

 

GENERAL INFO
  About
News Page
Faculty Positions Available 
  SCS Calendar
EDUCATION
Ph.D. in CS
B.S. in CS
M.S in CS
Doctoral Catalog
RESEARCH
Faculty Research Guide
Areas of Research
Undergraduate Research
Publications
PEOPLE
Who's Who
   Faculty List
  Administrative Staff
Grad Student Directory
Undergrad Student Site
  CSD On the Road
   

 

Search SCS

google

Vision
Jeannette M. Wing, President's Professor of Computer Science, Computer Science, Department Head

 

Computational thinking will be a fundamental skill used by everyone in the world by the middle of the 21st Century.

To reading, writing, and arithmetic, add computational thinking to every child’s analytical ability. Imagine! And just as the printing press facilitated the spread of the 3 R’s, what is appropriately incestuous about this vision is that computing and computers will facilitate the spread of computational thinking.

Examples of Computational Thinking

What do I mean by computational thinking? Computational thinking is taking approaches to solving problems, designing systems, and understanding human behavior that draw on the concepts fundamental to computer science. Computational thinking includes a range of “mental tools” that reflect the breadth of our field.

When faced with a problem to solve, we might first ask “How difficult would it be to solve?” and second “What’s the best way to solve it?” Our field has solid theoretical underpinnings to answer these and other related questions precisely. Stating the difficulty of a problem takes into consideration the underlying power of the machine— the computing device that will run our solution. We must consider the machine’s instruction set, its resource constraints, and its operating environment. In solving a problem efficiently, we can further ask whether an approximate solution is good enough, whether we can use randomization to our advantage, whether false positives or false negatives are allowed. Computational thinking is reformulating a seemingly difficult problem into one we know how to solve, perhaps by reduction, embedding, transformation, or simulation.

Computational thinking is thinking recursively. It is parallel processing. Computational thinking is type checking, as the generalization of dimensional analysis. It is recognizing both the virtues and dangers of aliasing, i.e., someone or something having more than one name. It is recognizing both the cost and power of indirect addressing and procedure call. It is judging a program not just for correctness and efficiency, but for its esthetics; and a system’s design, for its simplicity and elegance.

Computational thinking is using abstraction and decomposition when tackling a large complex task or designing a large complex system. It is separation of concerns. Computational thinking 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 that we can safely use, modify, and influence a large complex system without understanding every detail of it. It is modularizing something in anticipation of multiple users or pre-fetching and caching in anticipation of future use. Computational thinking is thinking in terms of prevention, protection, and recovery from worst-case scenarios through redundancy, damage containment, and error correction. It is calling gridlock deadlock and contracts interfaces. It is learning to avoid race conditions when synchronizing with each other.

Computational thinking is using heuristic reasoning to discover a solution. It is planning, learning, and scheduling in the presence of uncertainty. It is search, search, search—resulting in a list of webpages, a strategy for winning a game, or a counterexample. Computational thinking is thinking about ways to use massive amounts of data effectively. It is making tradeoffs between time and space, between processing power and storage capacity.

Here are some real-world examples: When your daughter goes to school in the morning, she puts in her backpack the things she needs for the day. That’s pre-fetching and caching. When your son loses his mittens, you suggest that he retrace his steps. That’s backtracking. At what point do you stop renting skis and buy yourself a pair? That’s on-line algorithms. Which line do you stand in at the supermarket? That’s performance modeling for multi-server systems. Why does your telephone still work during a power outage? That’s independence of failure and redundancy in design. How do CAPTCHAs authenticate humans? That’s the difficulty of solving hard AI problems to foil computing agents. Computational thinking will have become ingrained in our lives when words like “algorithm” and “pre-condition” are part of our vocabulary; when “nondeterminism” and “garbage collection” take on senses meant by computer scientists; and when trees are drawn upside down.

Computational Thinking: Now and Tomorrow

We have already witnessed an influence of computational thinking on other disciplines.

Machine learning has transformed statistics. Statistical learning is being used for problems on a scale, in terms of both data size and dimension, that were unimaginable years ago. Statistics departments are now hiring computer scientists. Schools of computer science are embracing existing or starting their own statistics departments.

Our big bet in computational biology is our field’s belief that biologists can benefit from computational thinking. Our contribution to biology goes beyond searching through large amounts of sequence data looking for patterns. It is the hope that our data structures and algorithms—our computational abstractions and methods—can represent the structure of proteins in ways that elucidate their function. Computational biology can change the way biologists think. Similarly, computational game theory can change the way economists think; nanocomputing, chemists; quantum computing, physicists.

The boldness of my vision is that not only will computational thinking be part of the skill set of other scientists, but it will be part of everyone’s skill set. The analogy is: ubiquitous computing is to today as computational thinking is to tomorrow. Ubiquitous computing was yesterday’s dream now becoming today’s reality. Computational thinking is tomorrow’s reality.

Computational Thinking: What It Is and Is Not

Computational thinking:

  • Conceptualizing, not programming: Suffice it to say that computer science is not computer programming. Thinking like a computer scientist means more than being able to program a computer.
  • Fundamental, not rote skill: By fundamental skill, I mean something that every human being needs to know to function in modern society. Rote means a mechanical routine. Ironically, not until our very own field solves the AI Grand Challenge of making computers think like humans will “thinking” be rote. Perhaps that can be saved for the second half of this century!
  • A way that humans, not computers think: Computational thinking is a way humans solve problems using computers. 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! Empowered with computing devices, we can use our cleverness to tackle problems no one would have dared to before the age of computing, and to build systems with functionality limited only by our imagination.
  • Complements and combines mathematical and engineering thinking: Our field inherently draws on mathematical thinking given that, like all sciences, our formal foundations rest on mathematics. Our field inherently draws on engineering thinking given that we build systems that interact with the real world. It is the constraints of the underlying computing device that force us to think computationally, not just mathematically. And it is our capability to build virtual worlds that free us to engineer systems beyond the physical world.
  • Ideas, not artifacts: It’s not just the software and hardware artifacts we produce that will be physically present everywhere and that will touch our lives all the time, but it will be the computational concepts we use to ap- proach and solve problems, to manage our daily lives, and to communicate and interact with others.
  • It’s for everyone, everywhere, all the time. Computational thinking will be a reality when it is so integral to human endeavors that it disappears as an explicit philosophy.

Why This Vision is Timely

Today the general public has a misperception of what computer science is all about. Many equate computer science with computer programming. Parents see a narrow range of job opportunities for their children if they major in com- puter science. Many people think the fundamental research is done; only the engineering is left.

Computational thinking is a grand vision to guide us as we act to change society’s image of our field. We especially need to reach the K-12 audience— teachers, parents, and students. Here are some messages to send:

  • Our field continues to expand, not just as we collaborate with more and more other disciplines, but also as we gain a deeper understanding of our own discipline. There remain intellectually challenging and engaging scientific problems to be understood and solved. The problem space and solution space are bound only by our own curiosity and creativity.
  • One can major in computer science and do anything. One can major in English or mathematics and go on to a multitude of different careers. Ditto computer science. One can major in computer science and go onto a career in medicine, law, business, politics, any science or engineering, and even the arts. More obviously, the interdisciplinary nature of our field means majoring in computer science enables a student to launch a career in a different discipline or at the boundaries of many.
  • Studying computer science empowers people with a way of thinking.

Please join us at Carnegie Mellon in making computational thinking commonplace!

Visit the Center for Computational Thinking

Computer Science Department
Carnegie Mellon University, Pittsburgh PA 15213-3891
Wean Hall 4212. Phone: 412-268-2565, Fax: 412-268-5576

 

      CSD Home   Webteam  ^ Top   SCS Home