Posts tagged ‘computational thinking’

Why should we teach programming (Hint: It’s not to learn problem-solving)

This is a revision of the original post. Several readers pointed out on Twitter that my original post was insensitive. It read like an attack on Brenda, a woman of color, from a senior white guy (me). That was not my intent, and I apologize for that. I am grateful to Joseph P. Wilson who helped me understand how to avoid that impression. I can’t change the post that went out yesterday, but I will be more careful in future blog posts.

At the CS for All Consortium Celebration Tuesday, Brenda Wilkerson gave the closing keynote. The full livestream of the CS for All Summit is available here, and it includes Brenda’s talk. I’m a huge fan of Brenda, and she’s done fabulous work in Chicago. She is a leader in bringing CS to All.

I have not seen Brenda’s talk or any of the livestream. My experience of the Consortium Celebration was through reading the Twitter stream as I found time during the day. Brenda had one slide (which you can see in the tweet linked here) that I disagreed with, and because it’s an important point, I’m going to respond to it here.

It says, “Computer science builds the mental discipline for breaking down problems, and solving them.” There are few studies that test this claim as “computer science,” but there have been lots of studies looking for transfer from teaching programming to general problem-solving skills. Probably the first study investigating this claim is Roy Pea and Midian Kurland’s paper On the cognitive effects of learning computer programming. You can find this claim in a paper by Henry Walker to which I responded in this blog. You can see it in posts all over the Internet, from this blog post to this article from a teacher in England. There is a strong belief out there that learning computer science, and programming called out specifically, leads to new problem-solving and “a new way to think.”

There is simply not evidence in support of these claims. I talk about these in my book, I reference the Palumbo meta-review in this blog post, and NYTimes wrote about it this last spring. Like “learning styles” and “Latin teaches thinking,” this is a persistent myth that learning computing leads to problem-solving skills, and we have no support the claim.

I tweeted in response to Brenda’s slide, and several CS teachers asked me, “So why teach programming or computing at all?”  That’s a great question!  Here are some of my top reasons:

  1. To understand our world. The argument that Simon Peyton Jones made in England for their computer science curriculum is that Computer Science is a science like all the others. We teach Chemistry to students because they live in a world with chemical interactions. We teach Biology because they live in a world full of living things. We teach Physics because they live in a physical world. We should teach Computer Science because they live in a digital world.
  2. To study and understand processes. Alan Perlis (first ACM Turing Award laureate) argued in 1961 that everyone on every campus should learn to program. He said that computer science is the study of process, and many disciplines need people to know about process, from managers who work on logistics, to scientists who try to understand molecular or biological processes. Programming automates process, which creates opportunities to simulate, model, and test theories about processes at scale. Perlis was prescient in predicting computational science and engineering.
  3. To be able to ask questions about the influences on their lives. C.P. Snow also argued for everyone to learn computing in 1961, but with more foreboding. He correctly predicted that computers and computing algorithms were going to control important aspects of our lives. If we don’t know anything about computing, we don’t even know how to ask about those algorithms. It shouldn’t be magic.  Even if you’re not building these algorithms, simply knowing about them gives you power. C.P. Snow argues that you need that power.
  4. To use an important new form of literacy. Alan Kay made the argument in the 1970’s that computing is a whole new medium. In fact, it’s human’s first meta-medium — it can be all other media, and it includes interactivity so that the medium can respond to the reader/user/viewer. Computing gives us a new way to express ideas, to communicate to others, and to explore ideas.  Everyone should have access to this new medium.
  5. To have a new way to learn science and mathematics. Mathematics places a critical role in understanding our world, mostly in science. Our notation for mathematics has mostly been static equations. But code is different and gives us new insights. This is what Andy diSessa has been saying for many years. Bruce Sherin, Idit Harel, Yasmin Kafai, Uri Wilensky, and others have shown us how code gives us a powerful new way to learn science and mathematics. Bootstrap explicitly teaches mathematics with computing.  Everyone who learns mathematics should also learn computing, explicitly with programming.
  6. As a job skill. The most common argument for teaching computer science in the United States is as a job skill.  The original video argued that everyone should learn programming because we have a shortage of programmers. That’s just a terrible reason to make every school child learn to program. That’s what Larry Cuban was arguing this last summer. Tax payers should not be funding a Silicon Valley jobs program. Not everyone is going to become a software developer, and it doesn’t make any sense to train everyone for a job that only some will do. But, there’s some great evidence from Chris Scaffidi (that I learned about from Andy Ko’s terrific VL/HCC summary) showing that workers (not software developers) who program make higher wages than those comparable workers who do not. Learning to program gives students new skills that have value in the economy. It’s a social justice issue if we do not make this economic opportunity available to everyone.
  7. To use computers better. This one is a possibility, but we need research to support it. Everyone uses computers all the time these days. Does knowing how the computer works lead to more effective use of the computer?  Are you less likely to make mistakes? Are you more resilient in bouncing back from errors? Can you solve computing problems (those that happen in applications or with hardware, even without programming) more easily?  I bet the answer is yes, but I don’t know the research results that support that argument.
  8. As a medium in which to learn problem-solving. Finally, computer programming is an effective medium in which we can teach problem-solving. Just learning to program doesn’t teach problem-solving skills, but you can use programming if you want to teach problem-solving. Sharon Carver showed this many years ago. She wanted students to learn debugging skills, like being able to take a map and a set of instructions, then figure out where the instructions are wrong. She taught those debugging skills by having students debug Logo programs. Students successfully transferred those debugging skills to the map task. That’s super cool from a cognitive and learning sciences perspective. But her students didn’t learn much programming — she didn’t need much programming to teach that problem solving skill.But here’s the big caveat: They did not learn enough programming for any of the other reasons on this list!  The evidence we have says that you can teach problem-solving with programming, but students won’t gain more than that particular skill. That is a disservice to students.

Certainly there are more reasons than these, and I’ve seen several in the response to this blog post, and some in the comments below.

This was just one slide in Brenda’s talk. Her overall point was much more broader and more significant. I strongly agree with Brenda’s key point: CS for All is a social justice issue. Learning computing is so important that it is unjust to keep it from some students. Currently, CS is disproportionately unavailable to poorer students, to females, and to minority ethnic groups. We need CS for All.

October 18, 2017 at 12:30 pm 8 comments

The Limitations of Computational Thinking: NYTimes

The New York Times ran a pair of articles on computing education yesterday, one on Computational Thinking (linked above and quoted below) and one on the new AP CS Principles exam.  Shriram and I are quoted as offering a more curmudgeonly view on computational thinking.  (Yes, I fixed the name of my institution in the below quote, from what how it is phrased in the actual article.)

Despite his chosen field, Dr. Krishnamurthi worries about the current cultural tendency to view computer science knowledge as supreme, better than that gained in other fields. Right now, he said, “we are just overly intoxicated with computer science.”

It is certainly worth wondering if some applications of computational thinking are trivial, unnecessary or a Stepford Wife-like abdication of devilishly random judgment.

Alexander Torres, a senior majoring in English at Stanford, has noted how the campus’s proximity to Google has lured all but the rare student to computer science courses. He’s a holdout. But “I don’t see myself as having skills missing,” he said. In earning his degree he has practiced critical thinking, problem solving, analysis and making logical arguments. “When you are analyzing a Dickinson or Whitman or Melville, you have to unpack that language and synthesize it back.”

There is no reliable research showing that computing makes one more creative or more able to problem-solve. It won’t make you better at something unless that something is explicitly taught, said Mark Guzdial, a professor in the School of Interactive Computing at Georgia Tech who studies computing in education. “You can’t prove a negative,” he said, but in decades of research no one has found that skills automatically transfer.

April 5, 2017 at 7:00 am 7 comments

From Computational Thinking to Computational Participation in K-12 Education: Yasmin Kafai in CACM

Yasmin Kafai has been a friend and mentor to me for years — she introduced me to my PhD advisor, Elliot Soloway.  Her book with Quinn Burke, Connected Code, updates thinking about the role of computing and programming in schools. They emphasize an idea they call Computational Participation as a contrast with computational thinking.  I asked Yasmin to do a CACM Viewpoint on the idea, and it’s published this month. Yasmin has shared the paper on

In the 1980s many schools featured Basic, Logo, or Pascal programming computer labs. Students typically received weekly introductory programming instruction. These exercises were often of limited complexity, disconnected from classroom work, and lacking in relevance. They did not deliver on promises. By the mid-1990s most schools had turned away from programming. Pre-assembled multimedia packages burned onto glossy CD-ROMs took over. Toiling over syntax typos and debugging problems were no longer classroom activities.

Computer science is making a comeback in schools. We should not repeat earlier mistakes, but leverage what we have learned. Why are students interested in programming? Under what circumstances do they do it, and how? Computational thinking and programming are social, creative practices. They offer a context for making applications of significance for others, communities in which design sharing and collaboration with others are paramount. Computational thinking should be reframed as computational participation.

Source: From Computational Thinking to Computational Participation in K-12 Education | August 2016 | Communications of the ACM

August 17, 2016 at 7:06 am 1 comment

New ISTE Standards emphasize computational thinking with a better definition

ISTE has just released their ed-tech-influenced standards for students for 2016, and they include computational thinking — with a better definition than the more traditional ones.  It’s not about changing how students think.  It’s about giving students the tools to solve problems with technology.  I liked the frequent use of the term “algorithmic thinking” to emphasize the connections to the history of the ideas.  This definition doesn’t get to systems and processes (for example), but it’s more realistic than the broad transferable thinking skills claim.


Students develop and employ strategies for understanding and solving problems in ways that leverage the power of technological methods to develop and test solutions.

Source: For Students 2016

August 12, 2016 at 7:53 am 5 comments

Forbes weighs in on Computational Thinking: I’m one of *those* critics!

Based on the Forbes article (quoted below), I can now be referred to as Reviewer #2 (see post explaining that academic meme).  I am one of *those* critics.

I’m not apologizing — I still don’t see evidence that we can teach computational thinking the way it’s been described (as I discussed here).  For example, is it true that “Computational thinking can also help in understanding and explaining how things work”?  By learning about computational things, students will learn how to understand non-computational things?  Maybe, but I don’t see much research trying to achieve that and how to measure whether it’s happening.  I do believe that you can use computational things to learn about non-computational things, through modeling and simulation.  But that’s different than saying that “computational thinking” will get you there.

The defense offered in Forbes (“Despite almost a decade of efforts”) is a weak one.  There are lots of things that humans have believed for a lot longer than a decade that are still wrong.  Lamarckian theories of evolution?  Spontaneous generation? Flat Earth?  Length of time of a belief is not a measure of its truth.

Young students in grades K-6 should learn the basic ideas in computing and how to solve problems computationally.  Computational thinking can also help in understanding and explaining how things work. Computational thinking can be taught as a complement to science and to principles of engineering design. It can also be taught to support students’ creative expression and artistic talents.  Despite almost a decade of efforts to define computational thinking, there are still critics that suggest we don’t know what computational thinking means or how to measure it. The previously mentioned work in standards setting and assessment is helping to more clearly define computational thinking and how it can be incorporated in the classroom.

Source: Thawing from a Long Winter in Computer Science Education – Forbes

March 20, 2016 at 7:27 am 2 comments

Brain training, like computational thinking, is unlikely to transfer to everyday problem-solving

In a recent blog post, I argued that problem-solving skills learned for solving problems in computational contexts (“computational thinking”) were unlikely to transfer to everyday situations (see post here).  We see a similar pattern in the recent controversy about “brain training.”  Yes, people get better at the particular exercises (e.g., people can learn to problem-solve better when programming). And they may still be better years later, which is great. That’s an indication of real learning.  But they are unlikely to transfer that learning to non-exercise contexts. Most surprisingly, they are unlikely to transfer that learning even though they are convinced that they do.  Just because you think you’re doing computational thinking doesn’t mean that you are.

Ten years later, tests showed that the subjects trained in processing speed and reasoning still outperformed the control group, though the people given memory training no longer did. And 60 percent of the trained participants, compared with 50 percent of the control group, said they had maintained or improved their ability to manage daily activities like shopping and finances. “They felt the training had made a difference,” said Dr. Rebok, who was a principal investigator.

So that’s far transfer — or is it? When the investigators administered tests that mimicked real-life activities, like managing medications, the differences between the trainees and the control group participants no longer reached statistical significance.

In subjects 18 to 30 years old, Dr. Redick also found limited transfer after computer training to improve working memory. Asked whether they thought they had improved, nearly all the participants said yes — and most had, on the training exercises themselves. They did no better, however, on tests of intelligence, multitasking and other cognitive abilities.

Source: F.T.C.’s Lumosity Penalty Doesn’t End Brain Training Debate – The New York Times

March 18, 2016 at 7:26 am 5 comments

What does it mean to assess Computational Thinking?

One of the arguments I develop in my book on learner-centered design of computing education is that computational thinking, using Jeannette Wing’s description, is implausible.  There’s part of her description that talks about computing providing a medium for advancing thinking and learning in other domains — that’s the application part of computing, and that’s quite plausible.  I call that part computational literacy because that’s the name Andrea diSessa gave to that idea years ago. Much of my book is about how to help students (of all kinds, from graphic designers to teachers to undergraduates) develop computational literacy.  Then there’s the part of Jeannette’s description that suggests that learning computing will impact everyday thinking and problem-solving, e.g., people will use ideas about caching when packing for a trip.  There is no evidence to support the belief that that will happen. Many studies investigating this kind of impact have not found that effect. (I’ve reported in the past how educational psychologists find computational thinking implausible.)  Sure, there other definitions of computational thinking (I reference the others in my book), but they all have this same thread — computational thinking is about thinking that helps outside of computing.

So what does it mean to assess computational thinking?  Most computational thinking assessments I’ve seen fail to connect the computing to some other discipline.  For both of Wing’s sets of goals, we need to show that students are learning computing.  That’s a necessary part — if you don’t know computing, you can’t apply that knowledge and you can’t transfer it.  But it’s not sufficient.  Students must be applying, connecting, or transferring the computing knowledge to other domains to be computational thinking.

SRI is developing a set of computational thinking assessments.  From poking through their website, I’m not finding any examples, so I don’t know if they succeed where others have not.  Their process is promising.

As part of the NSF-funded Principled Assessment of Computational Thinking (PACT) suite of projects, SRI Education has been working with curriculum authors and teachers, assessment experts, and computer scientists to develop assessments for ECS.

ECS emphasizes inquiry-based teaching to develop students’ problem solving skills, as well as their abilities to explain, elaborate, and evaluate what they are learning, often using multiple representations of particular solutions. These skills go well beyond recalling facts or giving inputs to a program and predicting its outputs. As a result, the SRI PACT team had to design and develop assessment tasks that elicited students’ problem solving and inquiry skills in authentic contexts and gave them opportunities to represent their skills in their own words and ways.

Applying a principled design method, the team first developed generalized design templates for computational thinking practices. These practices refer to how students design and implement creative solutions and artifacts, how they design and apply abstractions and models, and how they analyze their computational work and the work of others (among other practices). We then used these templates to guide the development of assessment tasks and scoring rubrics aligned with the skills related to the learning goals of the ECS curriculum.

Source: Broadening Student Participation in Secondary Computer Science Through Principled Assessment of Computational Thinking (PACT) | SRI International

January 13, 2016 at 8:12 am 15 comments

Older Posts

Recent Posts

October 2017
« Sep    


Blog Stats

  • 1,440,481 hits

Enter your email address to follow this blog and receive notifications of new posts by email.

Join 5,159 other followers

CS Teaching Tips