Two stories crossed in my attention today, seemingly unrelated but in fact, one holds the key to the other. New York Mayor Bill de Blasio announced that all NYC public schools should offer computer science to all students in 10 years. And police in Irving, Texas, handcuffed and arrested a ninth-grader for bringing a digital clock he had whipped up himself to school, to show to his teachers.
Being geek while brown and named Ahmed Mohammed brought out the racism and police overreaction in Texas.
As I pondered de Blasio’s announcement, I considered the ways this well-meaning initiative could just fizzle out. As someone with a life-long interest in this, not just as a person who got introduced to programming as a young teen, but also as an academic researcher, I was both excited and wary of potentially bungled attempt which would discourage further trying.
And I pondered the answer also in the headlines: how the nation should learn from Ahmed (after a lengthy, lengthy apology).
How will NYC expand computer science to all high schools? Here are some (sadly likely) scenarios that will go down badly:
Option one: Hire lots of geeks, who don’t know how to teach, expect that to magically work on creating more people who learn to program, and even decide to go into computer science.
Experience shows that this is quite unlikely to work at scale — except on kids who are already on this path. Those who need this least.
Trying to scale up a result by working backwards from successful examples is a common source of failure in many well-meaning social programs. (Social scientists call this selecting on the dependent variable which is appropriate for some questions, or for microbes, but rarely works well for humans).
You know the story: People look at successful examples of what they want to create more of — programmers or people who regularly exercise or eat their carrots— and take an epidemiological approach: working backwards from those who already do this to their life story, as if learning to code were a virus, and if we could only find the initial infection model, we could just scale it up.
What such initiatives often end up finding is that this doesn’t work simply because there are inherent and strong differences between people who already end up on this path as earlier adopters, and people we are trying to pull to this path, as an expansion. What works on one rarely works on the latter. Early adopters are different than people who come after them. (This, by the way, is a reason some startups fail: they can’t judge how to scale up without getting stuck on early adopter populations).
Teaching well is also not something that works like an infection, spreading knowledge through mere exposure, from the all-knowing to the ignorant. Over the years, I have watched many efforts by very well meaning, wonderful technical people who tried to teach important technical matters to non-geek communities. Few such efforts worked well because teaching is the art and science of disregarding one’s own journey in favor of understanding the path of the person in front of you. Knowing the content to be taught is absolutely necessary, but never sufficient.
This is not to say expanding opportunity doesn’t expand outcomes: it does, but within very real limits unless opportunity is defined in a way that is broader that what worked in the past.
Option two: Hire teachers who don’t know how to code, and don’t necessarily like it, and see if they can teach it to the youngsters in mandatory classes. No, no, no, unless we want to add codephobia to math anxiety that many youngsters pick up from their teachers and parents (and Barbie) who utter phrases like “math class is tough” or “I’m not good at math.” (Truth: math is not easy, but neither is reading or roller skating. Like many endeavors, math takes some persistence, and many are blocked from trying again from the anxiety, which then blocks discovering true joy of the field through competence and learning.).
So how to teach coding and get students interested in computer science? (Though those are not exactly the same).
By focusing on what motivates people to enter and stay in these field, and finding ways to expand that path.
In motivational research, scholars talk about intrinsic and extrinsic motivations. Extrinsic motivations are external rewards: Read so many chapter books, and we’ll pay you money, or give you good grades. A higher salary, to someone already making good money. These act like shiny stickers on a hollow core. They stop working the moment sticker loses the shine. Intrinsic motivations are being moved to act from the joy of the pursuit: reading as pleasure. A job that is fulfilling. This is strengthening the core, the generative, joyful part of learning process so that people keep eat it.
It turns out from research that over-emphasizing the extrinsic motivations blocks people from discovering their own path to the intrinsic motivations. Kid who are given money to read stop reading when the money stops coming. Kids merely encouraged to read, without rewards, are more likely to grow into enjoy reading for the sake of reading. External motivations are good to get people started a little, but anything that will become lifelong has to switch to encouraging paths to intrinsic motivation as soon as possible.
The way to attract students to computer science and coding isn’t to try to attract them to programming languages. (Though never teach anyone Basic.) (::ducks from the fight sure to erupt in the comments to the previous sentence::). It really doesn’t matter that much which language they get in the field (though Python and C are good options that will help ground them for life). Motivation for the field is not going to be making a lot of money as a programmer, not for most of them. (Most ninth graders aren’t the most practical people). And lofty language about diversity in programming won’t work too well as a motivation for most youngsters either. (While having teams that design our futures come from more walks of life is crucial, that is rarely how young people get moved to do anything.)
Instead, let’s think about the core that generates long-term interest. What distinguishes geek and programming culture is this: it’s a maker culture, one that is smart, creative and very interesting in building things.
You know, things like a home brew digital clock with some circuits and a transformer.
Just like Ahmed Mohammed.
I once wrote about this less understood aspects of geek culture, for the New York Times:
In a world where more and more jobs are reduced to pushing electronic paper or reading scripts to customers, or otherwise turned into endeavors with little to no autonomy, geek culture stands out as a place where creativity, imagination and ingenuity are prized. This is especially true for programmers: mainstream culture badly misunderstands them and therefore projects onto them motivations that betray a lack of appreciation of geek culture’s strengths.
Take director Aaron Sorkin’s portrayal of Facebook co-founder Mark Zuckerberg’s motives in the movie “The Social Network.” Zuckerberg’s initial incentives as a programmer are depicted as either an attempt to impress an ex-girlfriend (historically inaccurate as he was already dating the woman he’d later marry), or an anxious attempt by a “low-status” person, which the movie assumes geeks must be, to join Harvard’s rarified social clubs that only accept high-status WASPs of old money.
In contrast, many geeks are motivated by the deep joy of building things and would be bored to tears in a pretentious, stuffy social club based on lineage. The flood of money to the sector is certainly having an impact, but for many, its true attraction is the pleasure, and the power, inherent in creating “worlds,” through line by line of code, a delightful endeavor that combines deep intellectual challenges with the pleasures common to other creative activities such as art, cooking or music.
That’s right: fields that are akin to computer programming in terms of teaching are art or cooking: a mix of science and art, both aspects interesting, and an emphasis on doing, but within rules, rules which can be expanded and bent, creatively, with increased competence.
And that means letting kids build things through computation, but things that work, and things that do things. Not boring exercises designed to be graded easily, not learning what commands do. Rather, using computation but with guidance of experienced teachers who also take joy in the field.
Can technically competent people be taught to teach better? Absolutely. Can teachers be taught to code so that they approach the field with joy and competence, rather than anxiety? Of course. But above all, computing classes should be places where maker culture thrives, and students learn to build things that work.
Computation is increasingly integrated into every field. Kids who want to grow up to save lions from going extinct can learn to program spatial optimization programs that conservationists use to carve out the geography national parks that maximize biodiversity. Students who like literature can reflect on word patterns and sensibility in literature by building digital humanities tools. Kids who like physical sciences can build games that throw objects along a trajectory inflected by gravity. (I dunno, like throw some birds at some pigs from a sling?)
Making, just making is a joyful act. In a world increasingly designed to throw away and buy new and complete objects to replace things that don’t work rather than fix, tinker and rebuild, maker culture a great sensibility to cultivate. Making is among the most human of human things, a deeply fulfilling part of our souls, and something that is increasingly constricted in an straitjacket workplace in many fields. Maker culture will be a draw to many kids, many of whom won’t end up as programmers, but will likely use or understand computation better in the rest of their lives.
My dream would be computer science classes that are workshops: learn, do, make, test, redo. Share examples, receive guidance and try again. Few lectures. No worksheets. Failure as a reward for trying, not an excuse for a low grade. Just making and learning. On iteration.
Don’t build computer science classes. Build and celebrate a maker culture.
Let Ahmed be Ahmed.
The rest will flow.