This post is in response to comments received on my last post A "Hello World" Apart where I argue that it is not necessary to know how to program to tackle problems that typically lie in the domain of computer science, as these problems often require thought on matters very familiar to the humanities.
Computational Thinking is the attempt to think computationally (read: algorithmically, mathematically) about problems without necessarily thinking in terms of programming.
It looks to me like what CT really aims at is the ability to think like a computer. Now where does that get you? In my opinion, the purpose of thinking "computationally" is the ability to see a problem in terms that a computer will be able to operate on. Whether or not a computer (or computation in general) will be of any use is entirely contingent on your ability as a problem solver to render (or model) your problem computationally. I think that as a goal is a perfectly reasonable and useful one. However, the website goes further.
The website suggests that CT makes it possible "for transplant surgeons to realize that more lives can be saved by optimizing the exchange of organs among pools of donors and recipients." Once we move beyond the realm of computation I grow very suspicious because we are no longer thinking in terms of a problem that must be computed, or to which computation is central. The same problem persists with a claim such as that "it enables new drug designs to be analyzed so that they are less likely to create drug-resistant strains of diseases." Let me be a bit more specific about what makes me nervous here, because computation could certainly play a role as a tool to optimize the aforementioned pools or analyze the relevant drugs. What I take issue with is the idea that thinking computationally permits the "realization" or the "analysis" in the first place. Too often I think people mistake the models for their referents. It is ethics, biology, pharmacology, anthropology and god knows what else that make it possible to "realize" or that make drugs a site for any given kind of analysis. If that analysis then proceeds computationally, the segment of the work in which one is recognizing a computationally structured problem within their work and modeling the problem to be computed on -- that is computational thinking.
I would go on to suggest that if we are in the business of asking those who generally don't to "think computationally" then we would be silly not to ask those who are used to thinking computationally to "think humanistically" as well. The core idea of my original post is that the problems we encounter are never computational or non computational problems, but we can only address them by modeling them within the constraints of whatever domain we use to pursue them. If we take the website's example of the organ donor pooling, "optimizing" that in a computational sense may yield a computationally optimal solution, but if our computational models do not account for the optimality of ethics or medicine then our solution is only as good as our models, which is to say unethical and medically impractical. Garbage in garbage out, that's how models work.
So then in reference to Ian's post, can we think computationally without programming? I would argue that there is no substitute for a deep knowledge of computation, programming, and everything else involved to truly be a good computational thinker, but I have two reservations.
First, it is easy for me to imagine someone getting a sense of what computers can and cannot do without being familiar with programming or really much computer science at all. To refer back to the original post, I posted a segment of the introduction of a computer science paper on natural language processing. An English professor's understanding of what language is is undoubtedly different from a Computer Science professor's, but computational thinking in this case only requires one to understand that word frequency, distribution, and other very literal textual components are the coins of the nlp realm, and that computers have no way to gauge tone or take characters for granted. I think one is likely to be a poor computational thinker the further divorced one is from the universe of how a computer represents its objects, but it may yet be enough. One could hope that in an idealized disciplinary give and take the English professor might yet be able to construct a sense of how metaphor operates through literal language that might be computer legible. One will not master literature without writing (for given values of writing) and one will not master computation without code, but that doesn't make the endeavor fruitless in either direction.
Second, though, I just want to clarify that the question of whether programming is central to computational thinking is not the question of whether programming is a precondition to working on issues that are problems in the computer sciences. As I made reference to above, problems to which computation is being applied do not imply "computational problems." Computational thinking is just the best way to communicate with the computer and perhaps its operators.