Stop telling kids that programming is a foreign language

January 19, 2016 · 3 minute read

Do you think computer programming should count as a foreign language credit in US schools? New Mexico does. So do legislators in  Kentucky and Washington and several other states, with more on the horizon as fears about US students’ STEM deficiencies increase.

At first glance, the idea of letting kids study Swift instead of Spanish may seem appealing. We all know computer programming is an important skill, so it would be nice if it was promoted from elective status in schools, and there are plenty of superficial parallels between code and natural languages: both come from large families, so picking up your eighth declarative programming language is a lot easier than learning your first; both have concepts of grammar, syntax and so on.

The ways in which this idea is terrible are also apparent at first glance, and agreed on by both linguists and computer scientists. A quick rundown of some highlights:

  • Computer programming languages are basically logical notation systems, not true languages. Their vocabularies are tiny and their grammars are intentionally simplified. For that reason alone, they really belong under the math and science umbrella, not with the foreign languages.
  • There’s a lot more to computer science than just programming, so let’s not confuse kids by reducing CS to the sum of one of its parts.
  • Believe it or not, it’s still important that we know how to talk to other humans around the world, as well as computers.
Despite the controversy, the Florida senate recently introduced another bill to let kids get foreign language credit for programming classes, so this issue isn’t going away anytime soon. In the meantime, let me put forth another thought, one that I haven’t seen presented too often, about why computer programming and foreign languages should be kept on opposite sides of the quadrangle.

When we teach kids that coding == foreign languages, we make computer science even harder by “othering” it. It’s the “foreign” part that bothers me most. Computer science is long past the point where everybody, on every continent, needs to have some basic fluency with it. It’s a 21st century life skill, not an exotic career option. But if we send kids the message that coding is as relevant to their daily lives as ancient Greek, we place unnecessary distance between them and the code. They’ll think of programming as something spoken by strange computer people in far-off computer-land, not an extraordinarily immediate way of changing their own world. Computer science is difficult enough to learn, and already carries enough baggage as a subject for socially inept nerds, without imposing artificial barriers. The worst-case programming-as-foreign-language scenario is that kids walk out of high school with two years of Python under their belts as a “foreign language requirement” and no concept of how it relates to their own culture, in their own language, right now.

Instead of calling programming a foreign language, can we think of it as something more like music notation? We don’t tell kids that they have to learn another language to play a musical instrument, although your average music score has as many weird symbols and complicated design patterns as a Rails app. We focus on the end goal - playing cool music - and understand the notes on the page for what they are: a means to an end, a cross-cultural shorthand expressing creativity through code.

Just don’t suggest that idea to the Florida senate. I don’t think anybody wants marching band replaced with C#.

If you enjoy my articles, comics, and stories, why not sign up for the mailing list?