Why students must learn computational thinking, and possibly, how to teach it
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:
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:
- Posing the right question (computational thinking)
- Real world -> math formulation (algorithmic thinking)
- Computation (programming)
- 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.