Require CS at Universities before K-12: Building a computational community for everyone
The argument made in Wired is an interesting one, and I partially buy it. Are high school and elementary schools the right places to teach programming to everyone? Does everyone at that level need to learn to program? What are we giving up by teaching coding? Here’s one possible scenario, a negative one but a likely one: We push CS into K-12 schools, but we can’t get everywhere. The rich schools are getting it first, so we run out of money so that we get to all rich schools and no poor schools. Computing education is now making larger the difference between the rich and the poor.
So is it wrong to teach a person to code? No. I don’t deny that coding is a useful skill to have in a modern ubiquitous computing society. It can help people personalize and understand the devices and services they use on a daily basis. It’s also good news that methods for teaching kids how to code are improving and becoming more effective, or that kids can ostensibly learn on their own when left to their own devices. The problem is elevating coding to the level of a required or necessary ability. I believe that is a recipe for further technologically induced stratification. Before jumping on the everybody-must-code bandwagon, we have to look at the larger, societal effects — or else risk running headlong into an even wider inequality gap. For instance, the burden of adding coding to curricula ignores the fact that the English literacy rate in America is still abysmal: 45 million U.S. adults are “functionally illiterate” and “read below a 5th grade level,” according to data gathered by the Literacy Project Foundation. Almost half of all Americans read “so poorly that they are unable to perform simple tasks such as reading prescription drug labels.” The reading proficiency of Americans is much lower than most other developed countries, and it’s declining.
Computational literacy is important, and school age is where to develop it. Programming can be a useful medium for learning the rest of STEM, so learning programming early can support later learning.
Eventually. That is the desired end-state.
We should focus on universal computing education in higher-ed before putting CS into K-12 classrooms: The problem is that we’re nowhere near that goal now. Less than 10% of NYC schools offer any kind of computer science, and less than 10% of US high schools offer AP CS. I argue that we should require computer science in colleges and universities in the US first, and then in K-12 classrooms, so that the teacher come out of undergraduate already knowing how to program and use it in their classes. I worry that if we can’t make required computer science happen in higher ed, the costs for getting it into all of K-12 are too large — so only the rich will get it. I worry also about the kinds of arguments we make. If we can’t make universal computational literacy happen in higher ed, what right do we have to force it on all the high schools and elementary schools? “This isn’t good for us, but it’s good for you”?
The biggest challenge in growing computing education in K-12 is finding enough teachers. Programs like TEALS are stop-gap measures. We need to recruit teachers to meet the needs in NYC. Most professional development programs are under-subscribed — there are lots of empty seats. How do we convince teachers to go take extra classes in computing, especially if they’re already an established teacher in some other discipline? If we taught everyone computing in undergraduate, we’d teach all the pre-service teachers. We wouldn’t have to do extra in-service professional development. (Pre-service education is much less expensive to implement than in-service. In-service teachers get paid to attend workshops. Pre-service is funded by tuition.)
We absolutely should be doing research on how to put computing into K-12 schools. I am concerned about the costs of large scale implementation before we know what we’re doing — both in terms of making it work, and in what happens when it doesn’t.
Literacy starts with community: Situated learning is a theory which explains why people learn. Students learn to join a community of practice. They want to be like people that they admire, to adopt their values and practices. Think about computing education from a situated learning perspective. Let’s imagine that reading has just been invented. It’s a powerful literacy, and it would be great to teach it to young kids so that they can use it for their whole lives and all their years of schooling. But if we try to teach it to them before many adults are reading and writing, it comes off as inauthentic. You can imagine a child thinking, “Why should I learn to read? The only people who read are monks and professors. I don’t want to be like that.” If few people read, then few people write. There’s not even much for the children to read.
I suspect that textual literacy was first learned by adults before it became a school subject. Adults learned to read and write. They wrote books and newspapers, and used reading in their daily lives. Eventually, it became obvious that children should be taught to read.
Today, children don’t see a world of computational literacy. Children don’t see many adults writing bits of code to do something useful or something beautiful or something enlightening. You can imagine a child thinking, “Why should I learn to program? The only people who program are geeky software developers and professors. I don’t want to be like that. And even if I did want to be like them, the geeky software developers don’t use Scratch or Blockly or App Inventor.” Students today are not immersed in a world of code to explore and learn from. Most programs that are available to study are applications. Studying existing programs today is like learning to read only with legal documents or the Gutenberg Bible. Where are the McGuffy Readers of code, or the Dr Seuss of imaginative programs? Those would be expected produces from a computationally literate society. A generation of college-educated programming professionals would help to create that society.
If you want students to gain literacy, place them in a community that is literate. That’s what Seymour Papert was talking about when he described Logo as a Mathland. We need a community of adults who program if we want children to grow up seeing programming as something natural, useful, and desirable.
The importance of getting it right: I was recently at a meeting for establishing a Framework for K-12 Computer Science Education, and Michael Lach spoke (see a description of him here). He warned curriculum writers and state/district leaders to go slow, to get it right. He pointed out that if we get it wrong, administrators and principals will decide that “Computing can’t be taught to everyone. It really is just for the geeky white boys.” And we’ll lose decades towards making computing education available to everyone. (Lach’s talk was deep and insightful — I’ll say more about it in a future blog post.) We have to get it right, and it’s better to go slow than to create computing education just for the rich.