Too often, school reframes learning as skill- and fact-acquisiton. At best this creates a blindspot to the various metacognitive dispositions and disciplines which define good learning. At worst, it leaves learners predisposed to externalize all difficulties (“My teacher sucked.”) or internalize all difficulties solely in the language of skills (“I never was a math person.”) Both leave the learner disabled. Despite the fact that school has mostly failed to integrate computation into its world, in the course of our work we stub our toe on the projection of students’ notions of ‘how learning works’ all the time.
"But I heard C++ was the best programming language!" he said.
And it is always a he. Typically, he hasn’t really ever made anything with computers, yet. And often, he doesn’t even know know anyone who has. Although, his dad usually works in some sort of technical-cum-corporate role…maybe as a CIO or CTO or computer science professor. Importantly, it’s rare that his father has written a real piece of code in years. Regardless, this guy has made sure that his son grows up conflating ‘hard’ & ‘good.’ The honest oversimplification, "Some use C++ when optimizing performance," seals the deal. This ten year old, this aspiring software engineer, is going to learn to program in C++, because those things which are fast and hard and somewhat brutal are good (or at least, they’re for boys, and they’re certainly for this boy).
Needless to say, he hasn’t found his way into programming, yet. Perhaps he’s downloaded Unity because he read a review that said it was a big deal in game development. Or maybe he persuaded his dad to buy him Microsoft Visual Studio for Christmas and spent the morning installing the 10GB IDE. And maybe he even got "Hello World!" out of the deal. But for the most part, he’s a consumer—like the rest of us—though perhaps a little more assiduous a consumer of computer culture, too.
But despite all of this, computers are hugely important in his world. He’s grown up around them. He sees them at the center of culture near (in video games, which also matter deeply to him) and far (in the Pixar films or Facebook IPO on CNN he sees with his family). That is, he has fallen in love with the idea of computers. Unfortunately, actual computer culture offers pretty slim pickings [for kids]—even nowadays. And so now, after a few years of modding his computer case and finagling Maximum PC from his mom when they go to the grocery store and competitively reciting features & acronyms from Apple’s latest product release, he’s ended up in a room with me and a handful of other kids. And we’re making stuff, on computers. Sometimes its art, sometimes its math— Usually with Scratch or LOGO or Processing or NodeBox; it doesn’t really matter how. And inevitably, in the face of difficulty, the complaint bubbles to the surface, “This isn’t working because [the tool] sucks. Why can’t we use C++? Isn’t that the best?”
If the kids are young enough, I’m a compelling enough character to persuade them that their search for ‘the best programming language’ is meaningless. Sometimes I can pull out Steve Jobs, or if they’re really invested, Pete Norvig or Paul Graham. But more often than not, it takes another kid—someone explicitly not technical, often a she—to deprogram this fixation. When she makes a more interesting game or solves a problem he struggled with or maybe just obviously complains less than him, something clicks. And at that moment, he’s in a very fragile place. His ego is vulnerable & open. He can reject the situation—calling it ‘dumb’ or ‘just for kids’ or a ‘waste of time’—or he can embrace it. And ultimately, that’s a big part of my job.
A language is an interface between programmers and hardware, so it has social/psychological/pedagogical features which are just as important as its formal properties. If a language can’t be efficiently ported on regular hardware, it’s the language that sucks, not the hardware. Similarly, if it doesn’t interface properly with its communities of coders (fails to build up standard coding practices, good libraries, trust…), the language sucks, not the people. Ergo Lisp sucks. Many Lisp zealots dismiss the language’s failures as "merely social", but that’s missing the purpose of a language entirely: failing socially is just as bad as failing technically.
So ultimately, computer languages are tools. Meaning the cultural barriers to entry surrounding those tools matter just as much as the affordances the tools themselves provide. And it is amidst the ramifications of this fact that most of the interesting and important work expanding our computational fluency is to be done. Take video games. Video games are incredibly prominent in the world of children (i.e. boys). This has meant that video games have become a real entry point to computation for many [boys].
We should not be looking to ‘bring [the poor, the brown, the female] to computation.’ We should be bring computation to the ideas and problems and cultures which matter to them. Seymour Papert was trumpeting this idea in 1980. Writing about Brazil’s samba schools[community dancehalls where dancing is a community practice]:
There are problems with the image of samba schools as the locus of education. I am sure that a computational samba school will catch on somewhere. But the first one will almost certainly happen in a community of a particular kind, probably one with a high density of middle-income engineers. […] But as an educational utopian I want something else. I want to know what kind of computer culture can grow in communities where there is not already a rich technophilic soil.
[…] The obstacle to the growth of popular computer cultures is cultural, for example, the mismatch between the computer culture embedded in the machines of today and the cultures of the homes they will go into. And if the problem is cultural the remedy must be cultural.
The research challenge is clear. We need to advance the art of meshing computers with cultures so that they can serve to unite, hopefully without homogenizing, the fragmented subcultures that coexist counterproductively in contemporary society. For example, the gulf must be bridged between the technical-scientific and humanistic cultures. And I think that the key to constructing this bridge will be learning how to recast powerful ideas in computational form, ideas that are as important to the poet as to the engineer.
The opportunities have only grown since then.