COMMUNICATIONSOF THE ACM
March 2006/Vol. 49, No. 3
33
C
omputational thinkingbuilds on the power andlimits of computingprocesses, whether they are exe-cuted by a human or by amachine. Computationalmethods and models give usthe courage to solve prob-lems and design systems that no one of us wouldbe capable of tackling alone. Computational think-ing confronts the riddle of machine intelligence: What can humans do better than computers? and What can computers do better than humans? Mostfundamentally it addresses the question: What iscomputable? Today, we know only parts of theanswers to such questions.Computational thinking is a fundamental skill foreveryone, not just for computer scientists. To read-ing, writing, and arithmetic, we should add compu-tational thinking to every child’s analytical ability. Just as the printing press facilitated the spread of thethree Rs, what is appropriately incestuous about thisvision is that computing and computers facilitate thespread of computational thinking.Computational thinking involves solving prob-lems, designing systems, and understanding humanbehavior, by drawing on the concepts fundamentalto computer science. Computational thinkingincludes a range of mental tools that reflect thebreadth of the field of computer science.Having to solve a particular problem, we mightask: How difficult is it to solve? and What’s the best way to solve it? Computer science rests on solid the-oretical underpinnings to answer such questions pre-cisely. Stating the difficulty of a problem accountsfor the underlying power of the machine—the com-puting device that will run the solution. We mustconsider the machine’s instruction set, its resourceconstraints, and its operating environment.In solving a problem efficiently , we might furtherask whether an approximate solution is goodenough, whether we can use randomization to ouradvantage, and whether false positives or false nega-tives are allowed. Computational thinking is refor-mulating a seemingly difficultproblem into one weknow how to solve, perhaps by reduction, embed-ding, transformation, or simulation.Computational thinking is thinking recursively. Itis parallel processing. It is interpreting code as dataand data as code. It is type checking as the general-ization of dimensional analysis. It is recognizingboth the virtues and the dangers of aliasing, or giv-ing someone or something more than one name. Itis recognizing both the cost and power of indirectaddressing and procedure call. It is judging a pro-gram not just for correctness and efficiency but foraesthetics, and a system’s design for simplicity andelegance.Computational thinking is using abstraction anddecomposition when attacking a large complex task or designing a large complex system. It is separationof concerns. It ischoosing an appropriate representa-tion for a problem or modeling the relevant aspectsof a problem to make it tractable. It is using invari-ants to describe a system’s behavior succinctly anddeclaratively. It is having the confidence we cansafely use, modify, and influence a large complexsystem without understanding its every detail. It is
L I S A H A N E Y
Viewpoint
Jeannette M. Wing
Computational Thinking
It represents a universally applicable attitude and skill set everyone, not justcomputer scientists, would be eager to learn and use.
Leave a Comment