Skip to content

Why students must learn computational thinking, and possibly, how to teach it

November 30, 2010

Imagine a pencil. What makes this such a powerful tool? It’s the limitless number of things you can do with it.

What if the moment you’re given a pencil, you’re told you can only use it in certain ways? Maybe to count things, like this:

Never seeing a blank sheet of paper, a charcoal drawing, or handwritten poetry. Never thinking you could do this:

Dalton Ghetti pencil sculpture

Miniature pencil sculptures by Dalton Ghetti

The power of a pencil lies is realizing what you can do with it—write down the stories inside your head, re-invision the space around you in a drawing, record the music that flows through your ears.

How is this like a computer? I think a powerful argument for a computer as a pencil (or a bicycle for the mind, as Steve Jobs supposedly said) is made in this video by Daniel Shiffam:

Shiffam’s key point is that it’s not enough to give kids a computer or an ipad and set them loose, and it’s isn’t much better to train them to be “literate” with classes in powerpoint or how to be good consumers of information from the internet. If the computer really is a pencil or bicycle for the mind, then students must learn how to think computationally and algorithmically so that they fully understand what a computer can (and can’t) do, and then be able to instruct it to do so.

I say think computationally, and not program for a reason. Thinking computationally is about learning when to use a computer so solve a problem. It’s all about identifying when and where computers will be useful in helping to solve a problem. Thinking algorithmically is about translating the problem into an algorithm that you use to direct a computer to solve the problem. Programming is the more mundane task of turning the algorithm into a machine readable set of instructions for the computer to carry out. My claim is that we spend far to much time teaching people to believe that the incredibly exciting field of computer science is all about programming, when in reality it is about thinking, and this turns off most students, and prevents them from ever seeing just how a computer could transform what they are able to with their interests.

This is very similar to the criticism of mathematics education made by Conrad Wolfram in the short TED talk below:

In fact, there’s a direct correlation between the steps of math and computer science:

  1. Posing the right question (computational thinking)
  2. Real world -> math formulation (algorithmic thinking)
  3. Computation (programming)
  4. Verification (testing)

And just like math, computer science, as traditionally taught, spends too much time on step 3, neglecting all the others.

I can remember my first computer science class in college, taught by one of the best teachers I’ve ever had, Owen Astrachan. This course was so awesome that I remember getting the feeling that the natural language of my brain must be C++ (egads—I still get shivers when I think about the wonder that is quicksort). I also remember my friend, M, in the same class, who felt the class was impossibly hard, making no sense at all, and our assignments to not be all that engaging. I think this pretty much sums up the challenge of teaching computer science—some students, like me, will fall in love. Other students, equally talented, will find it abstract, uninviting, and unreliable to their interests and daily life.

Despite how great Owen was at teaching us, more often than not, the class felt like a programming class instead of a class in computer science (computational and algorithmic thinking). All of the problems were given to us, and most of them consisted of building ASCII totem poles, and the end of the semester project to implement so basic image manipulation tools. Of course later projects in subsequent courses were way cooler (I remember writing a web based powerpoint as a final project in software design), and since I took CS6 some 16 years ago, the assignments have gotten way cooler (even the totem poles). Still, it’s hard to make the focus of a class computer science when most of the focus is on learning a programming language (since some students have no background in programming) and most of the problems have been pre-selected to be computable.

I don’t think we can solve this problem by changing the way we teach computer science—too few students take this subject in high school or college to make a real difference (only 20,000 HS students take the AP CS exam; 10 times as many take AB calculus). Instead, we need to change the way we teach other subjects to take advantage of computational and algorithmic thinking.

So this is the challenge I’ve taken on—getting my students to see how the computer is a tool useful for answering questions in physics that we could not otherwise answer, and as the key to bringing real problems into the classroom. How I’m doing that, I’ll have to save for a later post.

I can already tell you I’m seeing promising results—in the form of more “cools” and “neats” than I ever heard when I actually taught computer science, and students being genuinely disappointed today when I told them we wouldn’t be working on designing models in the computer.

If you want to see what the payoff is for this approach, you might find it in the story of Kelly Ward, a computer science PhD student who got interested in modeling the physics of hair, and went on to become a senior animator at Walt Disney, where her expertise was critical to the new movie, Tangled.

12 Comments leave one →
  1. November 30, 2010 2:40 am

    This post reminds me of the discussions we had at my institution when we decided to offer a computational science minor instead of a computer science major. I especially like the notion of thinking algorithmically instead of programming. I use and teach a lot of Mathematica in my work and students find that it is amazingly powerful. In many of my assignments I say to the student to figure out the steps they took when looking at a plot of data to find the interesting features and then I’ll help them teach the computer (Mathematica) how to do the same.

  2. November 30, 2010 2:46 am

    This is great call to action. As you know I’m very interested in these ideas for HS physics and physical science. I can’t wait to read the followup.

  3. December 25, 2010 1:11 pm

    Here’s a very nice document that makes the argument for making a course in computer science that teaches algorithmic thinking a compulsory part of education, and was used at Exeter to add a computer science requirement to the curriculum.

  4. February 22, 2011 11:51 am

    Very interesting article and good points! I am an undergraduate research assistant working to get more middle and high school students interested in the topic of computer science and the topics of computational and algorithmic thinking are of special interest to me. Our research group uses programs like Alice and Google AppInventor to show kids what they can create within the field of computer science, but we would like to have them better understand the “back end” of programming and how to use the concepts of computational and algorithmic thinking in their projects. Do you have any ideas or recommendations about how to do this? We try to keep to things interesting since they are all young people and may get bored with a bunch of theory. Any comments you have would be appreciated!

    • February 22, 2011 3:50 pm

      This is great. Alice is a very good introduction, and I’m not that familiar with google app inventor. I’ve heard lots of great things about scratch as well. I think the key isn’t really the language, but instead, getting kids to use computational thinking (and not just playing with technology) in classes outside of technology and or math. It would be great to see students explore computational thinking to find all the instances of a character in a particular text in english class, for instance.

  5. February 2, 2013 9:11 pm

    Kinda off topic, but not really. A project I’ve been working on.

    For many students, learning STEM skills is hard. Maybe it doesn’t have to be.

    Learning science research shows we can help students learn STEM skills. Deep learning, formative feedback, … Unfortunately, these practices don’t make it into classrooms. The Dolfinity project aims to change that.

    Dolfinity has three parts:

    1. A guide to designing skill courses based on learning science research. The document improves as we learn more about learning.

    2. Open source software to help anyone create dolfins. Dolfins are Web sites that replace textbooks and lectures. “Dolfin” is an acronym for research-based practices: Deep learning, Outcome-based Learning, Formative feedback, Interaction with experts, and Nudging students.

    3. A community, to (1) promote the use and development of learning science, (2) help people make dolfins, and (3) improve the guide and the software.

    The result? Learning STEM skills is easier. Not by dumbing things down; that hurts everyone in the long run. If skill learning is a journey, dolfins smooth out bumps in the road. The destination is the same, but it’s easier for students to get there.

    If you’re interested, there’s more at I’d appreciate your ideas on where the project should go.



  1. A Nascent Vision of Technology « Quantum Progress
  2. Another blog about physics teaching? | Think like a physicist…
  3. Weekend Reading: Happy Grading Edition - ProfHacker - The Chronicle of Higher Education
  4. Teaching computational thinking |
  5. Why students must learn computational thinking, and possibly, how to teach it | Computational Thinking: Implications for WPS |

Leave a Reply

Fill in your details below or click an icon to log in: Logo

You are commenting using your account. Log Out /  Change )

Twitter picture

You are commenting using your Twitter account. Log Out /  Change )

Facebook photo

You are commenting using your Facebook account. Log Out /  Change )

Connecting to %s

%d bloggers like this: