In Research Notebook: Computational Thinking—What and Why?, Jeannette M. Wing presents a definition of computational thinking and an explanation of why it is important for everyone, not just computer scientists.
Her definition is
Computational thinking is the thought processes involved in formulating problems and their solutions so that the solutions are represented in a form that can be effectively carried out by an information-processing agent. [Jan Cuny, Larry Snyder, and Jeannette M. Wing, “Demystifying Computational Thinking for Non-Computer Scientists,” work in progress, 2010]
though she credits Al Aho for some of the thought behind it.
A key part of computational thinking is the value of levels of abstraction: being able to represent just the “relevant” information and manipulate it, without having to worry about lower and higher levels of representation, other than in explicit terms of the current level. To my mind, good computational thinking requires being able to switch levels of abstraction and to work in 2 or more levels at once, but just being able to abstract problems and hide some of the less relevant details is a valuable skill.
Jeannette gives some of examples of computational thinking in everyday life, one of which particularly rang a bell with me:
Hashing: After giving a talk at a department meeting about computational thinking, Professor Danny Sleator told me about a hashing function his children use to store away Lego blocks at home. According to Danny, they hash on several different categories: rectangular thick blocks, other thick (non-rectangular) blocks, thins (of any shape), wedgies, axles, rivets and spacers, “fits on axle,” ball and socket and “miscellaneous.” They even have rules to classify pieces that could fit into more than one category. “Even though this is pretty crude, it saves about a factor of 10 when looking for a piece,” Danny says. Professor Avrim Blum overheard my conversation with Danny and chimed in “At our home, we use a different hash function.”
The analogy is not perfect, as there is usually no collision resolution method when a bin gets too full. (In our house, collision resolution usually requires reallocation of space, which is a very expensive operation, just as in programming. Rehashing has been known to take months, and the temporary space used for the rehashing operation is not available for other tasks.)