Computational Thinking: A Powerful Idea Whose Time Has Come!
Context: In the '80s, With Seymour Papert and the LOGO programming language leading the way, there was a movement to include the teaching of computer programming in K-12. It was felt that in learning to program students would develop enhanced problem solving skills. Towards exploring the role that learning to program might play in enhancing problem solving, ES and several colleagues carried out a number of empirical studies, as described in brief, below.
Consider, then, the following two problems:
- Version 1:
- Given the following statement: "There are six times as many students as professors at this university."
Write an equation that represents the above statement. Use S for the number of students and P for the number of professors.
- Version 2:
- Given the following statement: "There are six times as many students as professors at this university."
Write a computer program in BASIC that will output the number of number of students when supplied (via user input) with the number of professors. Use S for the number of students and P for the number of professors.
(Note: in both versions the students wrote their answers on the sheet of paper that was provided. So, while the students in Version 2 wrote a computer program, they didn’t actually type the program into the computer and hit "run.")
When we asked undergraduate engineering students to solve problems of the above sort, what do you think we found?
- More undergraduates accurately answered Version 2 (write a program) than answered Version 1 (write an algebraic equation).
(And yes, the difference was statistically significant, p < .005 in fact.)
Say what? Isn’t the equation in both versions the same? Yes: S = 6P
As is often the case in science, being surprised is a good thing. And, boy oh boy were we surprised!
Why, then, would the undergraduates be more likely to provide the correct equation in the programming context than in the algebraic context? We hypothesized several possibilities for that finding:
- Perhaps students were seeing the S and P as "labels," as in 3feet = 1yard. The equals sign is used somewhat sloppily in the labels situation to denote a relationship, not a computation. However, in programming, there is no ambiguity in the semantics of the equals sign: The equals sign is really a replacement operation: the value of the equation to the right of the equals sign is stuffed into the value of the variable to the left of the equals sign.
- Perhaps in the programming case, students were "running" the computer programming and trying it out on specific values. In programming, testing with specific values is a strategy that is explicitly taught. In algebra — not so much emphasis is placed on testing with specific values — to say the least.
- Perhaps in the programming case, students were "decomposing" the computation into steps. For example, in more complex problems such as "for every 6 people who drank hard liquor, there were 11 people who drank beer" we saw some students writing two statements:
X = B * 6
H = X / 11
- Indeed, some students did break the task into sub problems, with an intermediate variable. In programming, "decomposing" a problem into pieces is a strategy that is also explicitly taught.
- Or, perhaps the fact that in programming an explicit operator, e.g., * for multiply, is required in an equation and that explicit notation requirement makes students think clearly about variables and values of variables.
We carried out more studies comparing the solving of equations via a writing program versus via writing an algebraic equation. And we analyzed the videos of interviews with the subjects where we asked them to think aloud as they solved the problems. Upshot: The above hypotheses were in fact all potential explanations: some students didn’t really perceive the letters to be variables, but rather they saw the letters as labels and the equals sign as stating a relationship. Similarly, some students did "run" the program they wrote on paper, testing the program with specific numeric values, while others did decompose the equation into sub problems.
While we were encouraged by these studies — encouraged that we were seeing some positive impact of learning to program, the movement to teach programming hit a wall. Two researchers, Gavriel Salomon and David Perkins, published a now classic paper in 1987 that reviewed the research literature on "transfer" and found that the "transfer" of skills from programming to other problem solving contexts is not likely to occur — unless students are explicitly instructed on how to make those transfers to each of the different contexts.
So, if programming skills don’t magically transfer, then, besides getting a good job, why learn to program? And, more specifically, what was going on when those students were able to more effectively write an algebraic equation while writing a program? The seeds were there in the 80’s, but it’s taken 30 years for the understanding to come forward.
While Papert used that term "computational thinking" in 1980, it wasn’t until Dr. Jeannette M. Wing, a professor at Carnegie-Mellon University among other positions, wrote an article in 2004 entitled "Computational Thinking" that the idea caught on. In Wing’s words:
- "Computational thinking involves solving problems, designing systems, and understanding human behavior, by drawing on the concepts fundamental to computer science… Computational thinking is thinking recursively… Computational thinking is using abstraction and decomposition when attacking a large complex task… Computational thinking is thinking in terms of prevention, protection, and recovery from worst-case scenarios through redundancy, damage containment, and error correction… etc."
Computational thinking skills are strategies for solving problems… are habits of mind… are ways of thinking.
So what does computational thinking have to do with the "students and professors" problem? Well, most of the reasons why students in the programming context were able to generate a correct equation were really computational thinking strategies, e.g., being explicit, testing, problem decomposing. Ala Salomon and Perkins, it’s not that the computational thinking skills learned while learning to program transferred to algebra, it’s that the computational thinking skills helped students understand specific algebraic concepts (e.g., variable, equation).
The implications of this way of thinking about the value of computational thinking, then, is most provocative: learn computational skills and in that context one might be able to learn concepts from other areas – areas (e.g., algebra) that have proven to be troublesome for some if not many learners. Interestingly, the National Science Foundation has a competition right now where it is looking for research proposals that integrate STEM areas with computational thinking!
- "A proposal may focus on studies on the effects of integrating computational thinking with STEM disciplines or the challenges of implementing these potentially disruptive educational interventions."
Hmmm: "… disruptive education interventions…" It was worth the wait!
Acknowledgement: ES wishes to thank John Clement and Jack Lochhead for their valuable collaboration while we were together at the University of Massachusetts/Amherst – Happy Valley.