Nobody Wants to Learn to Program
Last month Al Sweigart, author of Invent Your Own Computer Games with Python, penned a blog post with a fairly provocative (and perhaps a bit misleading) title: "Nobody Wants to Learn How to Program." In it, he contends that people ("primarily techies," he adds) often go wrong teaching programming by focusing too much on programming principles and not enough on building actual programs. "For the casually interested or schoolchildren with several activities competing for their attention, programming concepts like variables and loops and data types aren’t interesting in themselves," he argues. "They don’t want to learn how to program just for the sake of programming. They don’t want to learn about algorithm complexity or implicit casting. They want to make Super Mario or Twitter or Angry Birds."
Sweigart offers several tips to the aspiring programming instructor: avoid drag-and-drop interfaces (so in other words, don't avoid actual programming altogether) and make sure learners can easily copy others' code and in turn share their code, their projects with others.
No surprise with a headline like that, the post stirred a lot of response on Hacker News, with commenters sharing their own experiences learning to program, discussing the pros and cons of schools' programming curriculum (at the K-12 and college level), and debating whether "computer science" or "software engineering" was more useful and/or in demand by employers.
Then Zed Shaw, author of Learn Python the Hard Way, stepped in to the thread to challenge the original post, arguing that people really do want to program. They do want exposure to programming concepts. They do want to learn the "hard stuff". You just have to teach it right, according to Shaw.
But Shaw's argument seems to imply that programming isn't for everyone. Even if you teach it well, you'll "have people who aren't interested in programming at all and no amount of graphics, games, or cute cartoons is going to make them want to. You can't force or trick enlightenment on people."
Nobody wants to learn to program. That's one popular story to explain a dearth in programmers or a general lack of CS literacy. Then there's another story -- one that you hear a lot in programming circles -- that not everyone can learn to program. The unenlightened masses, I guess you could call us.
Or, Everybody Wants to Learn to Program
Add to the mix now, a fairly new story: suddenly everyone wants to learn to program.
Or at least, that's the subject of a couple of recent stories in The New York Times that have examined some of the growing excitement in "computer science for the rest of us" and in "learning the language of the Internet. Both of these stories highlight an increased interest -- in those outside the field of CS and outside the job title of software engineer -- in learning some basic programming skills.
The New York Times story does raise this issue:
"The challenge for Codecademy and others catering to the hunger for technical knowledge is making sure people actually learn something, rather than dabble in a few basic lessons or walk away in frustration.
'We know that we’re not going to turn the 99 percent of people interested in learning to code into the 1 percent who are really good at it,' said Mr. Sims of Codecademy. 'There’s a big difference between being code-literate and being a good programmer.' [emphasis mine]
That distinction is an interesting and important one. Kudos to Sims for recognizing it and for not using the word "real" to describe professional programmers and to dismiss what others do as, well, "fake." (The comments on the NYT story demonstrate the dangers therein, as some of responses suggest that only "real programmers" should have access to these CS skills.)
Nonetheless, I'm still really curious about this divide between the "nobody" and the "everybody" that (supposedly) want to learn to program. On the surface -- or definitionally, at least -- these appear to be different groups, competing narratives; but I'm not sure they necessarily are. Sweigart's argument, remember, was that the actual programming concepts are of little interest to the novice -- s/he wants to be able to build something that matters. That dovetails well with several of the learners interviewed in the NYT story too who need to be able to have some basic skills, for both their jobs and for the own interests. As librarian Rebecca Goldman told the newspaper, "All librarians now rely on software to do our jobs, whether or not we are programmers. Most libraries don’t have an IT staff to set up a server and build you a Web site, so if you want that stuff done, you have to do it yourself.”
And Then There's Everyone Else…
So how much is the right amount of CS to teach? (To clarify: I don't mean "how much is the right amount of programming" because I believe the answer to that in part depends on what the "stuff" is that learners like Goldman want to do in the first place.) Rather, how do we make sure we're doing more than, as Julie Meloni cautions in the NYT story, just enabling folks "to parrot back lines of code"?
I'm thinking about this in terms of my research for Mozilla too, particularly in light of questions about who the learners are that the organization has in mind for its learn-to-build-for-the-Web tool: those who are already familiar with sites like Hackasaurus? Or those who are apt to participate in events like the recent Toronto Hive Hack Jam? The "everybodies" that want to build for the Web? The "everybodies" that know that matters?
And what about "everyone else"? That is, the folks that don't even register as the "nobodies" or "everybodies" in these particular frames (well, unless you count the frames by those programmers who discount everyone who doesn't know how to program as unteachable and/or unenlightened).
When we say "everybody should program" and then -- OMG! Hooray! -- "everybody wants to learn to program," what and who exactly are we talking about? What caused that shift, for starters? So in response, what are we teaching and how? What are folks learning? Why? What are our expectations? What are theirs? How are we supporting them in their endeavors in learning to build what matters to them, sure, but helping them grasp the computational fundamentals so they can "get" programming knowledge (really "get it") and be able to apply it elsewhere?
Or, do we shrug and say that, well, they're not "real programmers," so the CS doesn't matter?
Photo credits: Dave Winer