# Stop Teaching Programming, Start Teaching Computational Thinking

School administrators and educators are currently zealous about the idea that every student should learn computer science. “Think about the world we live in now,” says New York Mayor Bill de Blasio, “Hundreds of thousands of good jobs will be accessible to those with coding and other essential skills.” I agree that everyone should learn to program, but I disagree with Mayor de Blasio’s motivations. You shouldn’t learn to program in order to get a good job. Learning to think computationally can give you a new way to understand and describe your world. Learning to program can make you a more expressive person.

We express ourselves in many different forms, and each form has its core elements. Musicians rely on pitch, rhythm, and timbre. Visual artists and designers use color, form, and scale. Performers use movement, gesture, and timing. Computational thinking is another form of expression, and it rests on a set of core elements as well: Inputs and outputs connect a computer to the rest of the world. Named memory addresses called variables keep track of important properties, like temperature, bank balances, or button pushes. Conditional statements define what to do when one of the properties changes significantly (for example “if my bank balance drops below \$10, email me”). Various forms of iterative loops are used to continually check for changes in a system’s inputs and to update its outputs. Functions combine several statements into repeatable actions. These concepts underlie every form of programming.

If you like to make things, you probably either design them with computers, or you put computers inside them. You may think you’re just a novice, but as you use these tools, you’re learning to program. If you think computer programming is all about math, you’re wrong. It’s about describing a situation precisely, and giving good directions for what to do when conditions change.

Consider these everyday moments:
» If the temperature goes below 65°, turn on the heat
» When the drum solo starts, mute the guitar track and spotlight the drum kit

All of these statements embody computational thinking. They could all be programs.

Computational thinkers aren’t just programmers. They’re the people who can create lovely intricate patterns in Illustrator, or make a really cool gizmo in Minecraft, or make a MIDI synthesizer play crazy microtonal jazz solos. They understand not only how to make a computer speak, but they also have an imagination for what it could possibly say. People often ask, “What language should I learn?” There is no right answer because you’re going to learn several if you start programming. Pick something that computers are used for that excites you, and find out what languages are used to make it happen. With each new application, you’re likely to learn a new language, and you’ll become a better programmer and a better computational thinker as you do.

Speaking and writing isn’t just something that linguists do, nor should programming be something that just computer scientists do. So learn to program. Like any form of expression, it will widen your view of your world as you learn to master it.

(Above) Leo Villareal of The Bay Lights project uses code to set up fantastic light patterns across San Francisco’s Bay Bridge. Photo by Lucas Saugan

### Tom Igoe

Tom Igoe is an associate arts professor at NYU’s Interactive Telecommunications Program, and a co-counder of arduino.cc.

View more articles by Tom Igoe
Send this to a friend