Learning to Code may be Enough — if it happens
June 13, 2013 at 1:57 am 8 comments
I highly recommend Shuchi Grover’s piece in EdSurge news (linked below). She makes a great point — that the goal of learning computing goes beyond learning to code. It’s not enough to learn to code. She talks about the challenge of learning to code:
I have encountered 12-14 year olds who have ostensibly marched through an entire Javascript course online but struggle to correctly configure terminating conditions for loops that involve Boolean operators in a fairly simple program. Anecdotal evidence from classrooms and teachers that use tools like Scratch, Alice or even the newly released Tynker suggests that while children comfortably learn to modify ready-made pieces of code as a starting point, they struggle when they must progress to tracing unfamiliar code, creating their own algorithmic programs, or debugging. This is not surprising at all. Algorithmic problem solving is not as easy as the “What schools don’t teach” Code.org video would have viewers believe.
There are similar themes in Roy Pea’s 1983 paper with Midian Kurland, “On the cognitive prerequisites of learning computing programming.”
Even among the 25% of the children who were extremely interested in learning programming, the programs they wrote reached but a moderate level of sophistication after a year’s work and approximately 30 hours of on-line programming experience. We found that children’s grasp of fundamental programming concepts such as variables, tests, and recursion, and of specific Logo primitive commands such as REPEAT, was highly context-specific and rote in character. To take one example: A child who had written a procedure using REPEAT which repeatedly printed her name on the screen was unable to recognize the efficiency of using the REPEAT command to draw a square. Instead, the child redundantly wrote the same line-drawing procedure four times in succession.
Coding is hard. Coding has always been hard. We want students to know more than just code about computing.
I’m not sure that Shuchi is right. Maybe learning to code is enough — if it happens. When I studied foreign languages in secondary and post-secondary school (Latin and French for me), there was a great emphasis on learning the culture of a language. There was an explicit belief that learning about the culture of a language facilitated learning the language. Does it go further? Can one learn the language without knowing anything about the culture? If one does learn the language well, did you necessarily learn the culture too? Maybe it works the same for programming languages.
Our human-centered computing PhD students who focus on learning sciences and technologies (LS&T) are required to read two chapters of Noss and Hoyles 1996 book Windows on Mathematical Meanings: Learning Cultures and Computers. They make the argument that you can’t learn Logo well apart from an effective classroom culture. As Pea and Kurland noted in 1983, and Grover has noted thirty years later in 2013, students aren’t really learning programming well.
What if they did? What if students did learn programming? Would they necessarily also learn computing? And isn’t it possible that a culture that taught programming well would also teach things beyond coding? Maybe even problem-solving skills? David Palumbo’s excellent review of the literature on programming and problem-solving pointed out that there was very little link from programming to problem-solving skills — but for the most part, students weren’t learning programming. I don’t really think that that would work, that learning to code would immediately lead to learning problem-solving skills. I do wonder if learning to code might also lead to learning the other things that we think are important about computing.
There is a positive evidence for the value of classroom culture. Consider the work by Leo Porter and Beth Simon, where they found that combining pair programming, peer instruction, and Media Computation led to positive retention and learning (as measured by success in later classes). Porter and Simon have also noted how students learning programming also develop new insight into the applications that they use. Maybe it’s the case that if you change the culture in the classroom and what students do, and maybe students learn programming and computing.
Entry filed under: Uncategorized. Tags: computing education, computing education research, Logo, Media Computation, pair programming, peer instruction, teachers.
1.
Neil Brown | June 13, 2013 at 3:32 am
Repurposing my thoughts on this piece from elsewhere: I feel partly that this article is saying “CS education is like education in general”. In all disciplines it is true that students often only reach shallow knowledge about what they are being taught, and lack the deep knowledge. This is true of History, of Mathematics, of Science and so on.
It’s funny how the article is phrased as an argument for moving beyond “learning to code”, because you need algorithmic thinking and debugging and problem solving. I see this as an argument for achieving deep learning of how to code, rather than shallow. In my opinion, the way to gain algorithmic thinking is not to move beyond learning to code, it’s to continue learning to code.
2.
Baker | June 13, 2013 at 8:07 am
I agree with Mr. Brown. You’re striking at the definition of what it means to learn ANYTHING. I was going to put it pithily/snootily: if you can’t solve problems with code, then you haven’t learned to code. That’s what I tell my students at least.
3.
joshg | June 13, 2013 at 9:54 am
This was pretty much my thoughts as well. It’s pretty unsurprising. My goal in having middle school kids working in Scratch isn’t to produce a full class of competent programmers. It’s to get them exposed to the core concepts of programming so that they see programming as something they are able to learn.
I’m pretty sure it will also pay off in the future by giving them a head start towards deep learning of programming, but I’m not making that an expectation for 12-year-olds. That just sounds like a setup for beating kids over the head with unreasonable expectations of high-level abstract thinking. And how exactly would *that* lead to more and more varied students learning to code well?
4.
gasstationwithoutpumps | June 13, 2013 at 12:04 pm
I don’t see the huge divide between “programming” and “computing” that others see. Of course, the student programming that I see is all problem solving, not rote exercises. Students can fail at the programming in many different ways (poorly chosen data structures, poorly chosen program organization, poorly chosen algorithms, incorrect coding of algorithms, bad documentation, non-idiomatic use of the programming language, …). I see very high correlations between these different failure modes—I don’t have large enough samples to do factor analysis, but I suspect that I would see primarily one factor for programming skill, with a minor second factor for completeness of documentation. I doubt very much that I’d be able to associate one factor with “programming” and another with “computing”.
5. Coding is hard? | Geeky Mom | June 13, 2013 at 1:57 pm
[…] Mark Guzdial writes about an article I, too, read recently suggesting that these learn to code sites aren’t doing the job. It’s not enough for students to go through a tutorial; they still don’t have the real problem solving skills necessary to do “real” programming. For example, they don’t really know what a loop is, or why you’d use it. He backs up some of the claims in the article with older research that essential shows the same thing: learning to code requires a lot of practice and teacher (or peer) support. In other words, students need a classroom and the culture that goes with it, in order to learn to code beyond just surface level remembering bits. […]
6.
hildawg | June 20, 2013 at 7:17 pm
I am learning the basics of programming as an adult, and I find it really hard because the courses only really teach the code part. For me, I like to know how things work – and that means understanding how the computer and system work. Otherwise, I just cannot fathom how code – no matter how much I memorize how to write it – can make a computer do what you want it to!
Thank you for this post!
7.
gasstationwithoutpumps | June 20, 2013 at 11:07 pm
You may want to take a “bottom-up” approach, then, that starts with basic computer architecture, rather than with high-level computing concepts like “objects”. Look for programming courses taught by computer engineering departments rather than computer science departments if you need this approach. (They’ll tend to use assembly language and C, rather than Java or Python, as the language of instruction.)
8.
Is it worth teaching young kids to code? | Computing Education Blog | October 7, 2013 at 1:27 am
[…] reports I’ve read about kids learning to program (like Roy Pea’s reports from decades ago, to Yasmin Kafai’s reports on students working in Scratch) suggest that […]