Are there some students who can’t learn how to code? Teachers must always answer “No!”

November 2, 2015 at 8:03 am 14 comments

The below-linked article does a good job of considering the argument about whether everyone can learn to program, and comes to the same conclusion that I do — a CS teacher must always believe that everyone can learn to program.

Indeed, one can find a good number of opinionators weighing in on the subject. In “Separating Programming Sheep from Non-Programming Goats,” Stack Exchange co-founder Jeff Atwood cites Bornat’s initial paper and concludes, “the act of programming seems literally unteachable to a sizable subset of incoming computer science students.” Linux creator Linus Torvalds has been quoted as saying, “I actually don’t believe that everybody should necessarily try to learn to code” — although, he does propose that people be exposed to it to see if they have “the aptitude.” Clayton Lewis of the University of Colorado at Boulder conducted a survey in which 77% of responding computer science faculty strongly disagreed with the statement “Nearly everyone is capable of succeeding in the computer science curriculum if they work at it.” As a “bright-eyed beginner” (with a scant 15 years of introductory programming teaching under my belt), it’s hard for me to accept the assertion that there are “some who can’t.” Such reasoning smacks of elitism and prejudice, even if such attitudes aren’t expressed consciously.

Of course, I’ll be the first to admit that my own opinion rests heavily on my own preconceptions: I’ve always had that “Montessori feeling” — every interested student should be given a chance to try, and sometimes fail, in a supportive environment.So, rather than give up on some, shouldn’t educators themselves keep trying? The inverse to the question “are there some students who can’t learn?” is this question, “are there some students whom our (current) teaching methods can’t reach?” The first question by itself implies a “yes,” and thus closes a door on some students. The second question opens up a world of inquiry: if basic coding concepts are truly so simple (as they truly are once the abstraction is understood), what do we need to do to bring the hard cases home?

Source: Are there some students who can’t learn how to code? – O’Reilly Radar

Entry filed under: Uncategorized. Tags: , , , .

Human students need active learning and Econs learn from lecture: NYTimes Op-Ed in defense of lecture What does a CS methods class look like?

14 Comments Add your own

  • 1. alfredtwo  |  November 2, 2015 at 8:44 am

    I think some people who do program just want to think there is something special about themselves. Some teachers don’t want to accept or admit responsibility when students don’t get it easily. So there is a bit of ego in all of this.

  • 2. gflint  |  November 2, 2015 at 10:43 am

    I have been teaching math and CS for 30 years. Yes, there are kids that cannot program. Just like there are kids that can’t do physics, or calculus or read Shakespeare There are certain talents needed for each. Usually they overlap but not always. Desire is one talent that is an absolute must. Give me that and I can usually overcome any other short comings the student may have.

    • 3. Mark Guzdial  |  November 2, 2015 at 10:45 am

      Super hard to prove that they can’t do it. Maybe they’ve just had bad teachers.

      • 4. zamanskym  |  November 2, 2015 at 4:45 pm

        Hard to prove that they can. Certainly a teacher has to approach their students with the attitude that everyone can do *whateverhtefieldyouteach* but certainly you’re not saying that everyone can be great at everything.

        Once we can admit that, “can’t do” is just a matter of degree.

        I’d say the vast majority of people can get something out of having a well designed, well taught CS class but they won’t all come out the same.

        • 5. dupriestmath  |  November 5, 2015 at 11:03 am

          Not everyone has to be great at it. Almost all kids should be able to get to a basic level of proficiency. Some will extend well beyond and some will take a long time to get to basic proficiency. If we want to get to “cs for all”, our teaching practices will need to start evolving and getting more complex. Ask the math and literacy teachers in your building how they reach all students and you’ll hear an amazing diversity of answers. We don’t have that yet, but we’ll get there.

          • 6. Mark Guzdial  |  November 5, 2015 at 12:17 pm

            I agree, Dawn. I’d like to go further. Knowledge about computing is not linear. It doesn’t make sense to talk about “being great” or not. A programmer who might go to Google or Facebook might be really the pits at music live coding or doing creative Media Computation assignments. That’s what I was trying to say in my blog post about “CS lite.” There are different kinds of “great” along different dimensions of computing knowledge. It’s not just rigorous or not, great or less. As you say, it’s about an amazing diversity of answers.

    • 7. gasstationwithoutpumps  |  November 2, 2015 at 11:31 am

      Desire to learn is one requirement, but there is more. They must be willing to debug failure and keep trying.

      I’ve had students who failed my class 4 times—always getting to about the 3rd assignment, then giving up. There is no evidence that these students did anything to prepare for the course between annual attempts—their code (on the same assignments) did not get better from year to year. I’ve had one student pull off a pass on the 4th attempt, by taking the time to learn to program between the 3rd and 4th attempt and not giving up at the first “redo” grade. (I don’t fail students on individual assignments, but give them “redo” if the work is not up to standards.)

      This is not an intro course (the failing students had had at least 4 programming courses from the CS department before this one, but had not learned to program without spoonfed scaffolding and had not learned to debug at all).

      I suspect that the CS courses are seeing a lot more passes despite incompetent programming, because the grading is all automated and no one is looking to see whether the code is well written. Well-meaning grad students have been debugging students’ code for them, so that students are getting through undergrad CS courses without ever learning to debug by themselves. Extremely clear specs are given for object-oriented assignments, so that students only have to fill in the blanks on already structured programs, and never need to learn to factor problems themselves.

      • 8. Mark Guzdial  |  November 2, 2015 at 2:23 pm

        Cool paper describing the phenomenon that you describe: students who take a class repeatedly, all with the same result. This paper found that students who attributed their success/failure in a class to luck wouldn’t change their behavior — why do so, if it’s luck if you pass each time? If you think it’s luck, then the first few assignments may be enough to tell you if you’re “lucky” this time. Or not.

        Brenda Cantwell Wilson and Sharon Shrock. 2001. Contributing to success in an introductory computer science course: a study of twelve factors. In Proceedings of the thirty-second SIGCSE technical symposium on Computer Science Education (SIGCSE ’01). ACM, New York, NY, USA, 184-188. DOI=

        • 9. gasstationwithoutpumps  |  November 2, 2015 at 5:47 pm

          Thanks, that is a cool paper. Interesting that belief in luck was such a powerful predictor.

  • 10. Josh Marinacci  |  November 2, 2015 at 11:08 am

    A few hundred years ago it was believed that only a small subset of people had the aptitude to read, write, and do arithmetic. Now we teach it to every kindergartener. While we understand that not every child can write a good novel or learn calculus, 100% literacy rates are our expected goal. I think programming will eventually be the same.

  • 11. Raul Miller  |  November 2, 2015 at 6:13 pm

    I imagine Linus Torvalds’ comment has to do with the quality of work he has seen. I imagine Jeff Atwood’s comment has to do with observations about people’s priorities and how they reflect in real world business contexts. I imagine people objecting to the “some people can’t or shouldn’t learn” are talking about hypothetical contexts where we can ignore practical limits such as time and interest and quality of result.

    The same words can convey different ideas to different people…

  • 12. Austin Bart  |  November 2, 2015 at 6:24 pm

    I try to teach as if all of my students can learn. In fact, I believe that given sufficient time and energy, any student can master all or at least most of my learning objectives.

    That said, I do think there are some students that would take a prohibitive amount of time or energy to do so. A very small percentage, say less than 20%, fall into this category of needing substantially more time than their peers. If programming takes 10,000 hours to master on average, they are the ones that need 50,000-100,000 hours. And for some of these students, it seems like there simply isn’t enough time in the semester.

    I wonder what can be done for these students who put in twice as much work as their peers but don’t seem to get much benefit. Beyond the philosophical question of how we should approach such students, I am curious what can be done when you’re at the end of the semester, and despite lot’s of one-on-one work and support, they still aren’t showing much improvement (beyond just saying “you’re not cut out for this”).

    • 13. Mark Guzdial  |  November 2, 2015 at 7:10 pm

      Maybe it’s not more time. Maybe it’s the activity. There are more and less efficient ways to teach. Remember that the work on developing expertise didn’t say 10,000 hours. It said 10,000 hours of deliberate practice — focusing on the particular things that the student needs to learn. I’ve blogged before about the variety of different CS teaching methods available.. We clearly need better ways of assessing students and matching student needs to different methods. But without a doubt, we spend far too much time just trying to get students to read code and write code.

  • 14. Matija Lokar  |  November 3, 2015 at 11:47 am

    Everything depends on what is meant by “learn to program”. Is it to progress in games like or is it to write (and understand) the code acting as HTTP server (
    Personaly I think – yes everone can learn about loops, variables, conditions . And we should teach everyone this basic facts like we teach everyone about the solar system, about the periodic system of elements, about …


Leave a Reply

Fill in your details below or click an icon to log in: Logo

You are commenting using your account. Log Out /  Change )

Twitter picture

You are commenting using your Twitter account. Log Out /  Change )

Facebook photo

You are commenting using your Facebook account. Log Out /  Change )

Connecting to %s

This site uses Akismet to reduce spam. Learn how your comment data is processed.

Trackback this post  |  Subscribe to the comments via RSS Feed

Enter your email address to follow this blog and receive notifications of new posts by email.

Join 10,184 other subscribers


Recent Posts

Blog Stats

  • 2,053,614 hits
November 2015

CS Teaching Tips

%d bloggers like this: