Kids should learn programming as well as reading and writing

Here's Mitch Resnick of the MIT Media Lab's Lifelong Kindergarten Group (whence the kids' programming language Scratch comes) doing a TedX talk about the role of programming in education, arguing that kids should learn to code so that they can use code to learn:

Most people view computer coding as a narrow technical skill. Not Mitch Resnick. He argues that the ability to code, like the ability to read and write, is becoming essential for full participation in today's society. And he demonstrates how Scratch programming software from the MIT Media Lab makes coding accessible and appealing to everyone -- from elementary-school children to his 83-year-old mom.

As director of the Lifelong Kindergarten group at the MIT Media Lab, Mitch Resnick designs new technologies that, in the spirit of the blocks and finger paint of kindergarten, engage people of all ages in creative learning experiences.

Reading, Writing, and Programming: Mitch Resnick at TEDxBeaconStreet (Thanks, Mitch!)


  1. Thanks for posting this! I do see that programming of this type can help train people to think in a specific way (linear, sequential, organized) that is very useful in later life. I don’t have the experience with children or scratch to know how this works in practice, especially with groups which are not self-selected (for example, I wonder how it works in a country where this required for everyone, not how it works in a special after-school group.) Ultimately I suspect coding joins the legion of other teaching techniques which work better for some people than others. 

    Unlike learning language literacy, I do think one can be productive without learning to code, and if anything, understanding how computers do their thing is less and less important. Human nature is to adapt the machines to our way of working, not vice versa. So he’s started to convince me that teaching coding may be a useful practice, but I’m not convinced it is important or beneficial for everyone.

    1. I would contend that understanding how computers work is more and more important as computers and computerized systems become more ubiquitous.

      “Human nature is to adapt the machines to our way of working, not vice versa.” How exactly can people hope to adapt those machines if they don’t know how they work? If you see a machine or computerized system as an opaque, unchangeable thing whose inner workings are a mystery, how likely are you to exert agency with respect to that system rather than passively accept it?

      1. I guess it depends what you mean by ‘exert agency’. I take that to mean, ‘to use effectively as a tool, to make a thing conform to my will.’ In which case I posit there are many, many technologies which can be used effectively by people who do not know how they work. The automobile is the cliche example. A more clever example might be a software package like Photoshop or Final Cut Pro for an artist (or any number of visualization tools I use as engineer). One can employ these tools to great effect, and for creative purposes — even in ways never anticipated by the developers — without knowing the detailed math of signal processing, data compression, or image manipulation.

        Now, some people in the world need to understand the details, but certainly not everyone. (I guess that’s the source of confusion: at one point I talk about human nature to adapt the world to our purpose: by this I mean some humankind in general, that is some humans somewhere, but not necessarily all. But I think most people do not require much knowledge of computer science, and will require even less as time goes on.) Tool use, even creative tool use, does not also require one to be a tool maker.

  2. “It goes against the grain of modern education to teach children to program. What fun is there in making plans, acquiring discipline in organizing thoughts, devoting attention to detail and learning to be self-critical?”  Alan Perlis

  3. Scratch Squeak! Smalltalk-80 with Alice as a front end.

    I absolutely LOVE Smalltalk programming. (I also love Forth, Neon, RPN and H+P Calculators :-)

    That’s the only problem.

    You have to get to the kids BEFORE they get trapped into a PROCEDURAL mode of thought. 

    object <- object.message [operand].
     is more natural than 
    variable := operation ([operand]);
     because its much easier to cascade the messages, and the object.message can even be a linguistic operation. (In effect allowing you to define/refine the object oriented language in its self.)

    1. Me too, but I have been doing it for 30 years so I guess I’m used to it.
      You might be interested to know that Scratch is coming to RISC OS on Raspberry Pi very soon. I should have the sound stuff working Real Soon Now.

      1. I started in on Smalltalk back in 1981 with the Byte Magazine issue. (I had already been into RPN and Forth for almost 5 years at the time. :-)

        I really got into is with the original Smalltalk/V implementation. (I even worked for Digitalk for a while.)

    2. I guess I was trapped in procedural thinking early, because it is hard for me to see how passing messages to objects is even remotely natural. Don’t get me wrong, I appreciate encapsulization, but I think procedural programming is more analogous to the way humans communicate processes to each other. In fact, I was writing a document called a ‘test procedure’ earlier today, which said, essentially, “Whenever you are told to do an acceptance test, do the following. First, do X. Then, do Y. Next, do Z.” 

      Now, I guess you could say the data generated by an acceptance test is directly associated with the specific instance (serial number) of the hardware unit being tested, and each class of hardware has its own acceptance test method, likely including steps copied directly from test methods of similar hardware, as well as unique changes. But that seems very meta…. :-)  

      1. The problem is that you have an unnatural/unreal separation between environments.

        The reflexive meta linguistic definition  you refer to doesn’t really exist. Its entirely arbitrary. (I did a lot of meta class programming, in effect, extending Smalltalk to have entirely new objects which defined entirely new “statements” which I used in the definition of novel meta-classes, classes, methods and objects, all of which were sub-classes of some class/object.)

        The division between a development IDE and a implementation GUI is an artificial construct born of some misguided attempt at coming up with some barrier which says: “Beyond this point, you cant do these kinds of things.” It would be nice if that was real, but its not.

        I have, in fact, needed a compiler at runtime to take a user defined/tested/implemented EBNF description of a problem space into system definition. The user needed and had to define the problem space and the software had to either adapt to it in one way (containing its own JIT compiler,) or had to keep staff (me) to adapt the EBNF notation model into an implementation.I wanted to have a life after the project so I gave them the tools, which were my GUI/IDE tools, to create their EBNF solutions from an EBNF description of the problem space.

        After years of doing design, development, implementation and testing on O-O software I came to appreciate that there is NO distinction between these stages. Its an iterative process, like a fractal, which can be taken at any point in the cycle and followed in either direction until it crystalizes into a hardware implementation.

        If architecture is frozen music, my music has been compared to defrosted architecture. (But its still running, years after I worked on it… :-)

  4. “He argues that the ability to code, like the ability to read and write, is becoming essential for full participation in today’s society.”

    This really comes across as a sort of nonsensical plug for Scratch, honestly. The vast majority of the population of the developed world lives and interacts completely fine without any knowledge of programming, while 1.5 billion people live without access to electricity at all, let alone computers.

    Programming really is a narrow, vocational skill. If everyone knew how to program and could do so whenever, that’d be great, and solve all sorts of problems- but it’d also be great if everyone had the skillset of a plumber or a carpenter or an accountant or a farmer. Lots of people- maybe most- simply don’t have the mechanical or mathematical ability to be a professional carpenter or accountant etc etc, and are content to live in a world where they can have running water and sturdy furniture and houses and food and all the other benefits of these skilled trades, while leaving the creation and maintenance of them to a skilled minority.

    So, I mean. Offering programming courses to middle- or high-school students as optional elective classes is fine, but construing programming as being on the level of reading or writing (proficiency in which are ABSOLUTELY REQUIRED by modern society) is absurd and will be absurd until we are all beings of pure data living in cyberspace.

    Until then, everyone will still need to eat and poop and live in buildings.

    1. Everyone should know the basics of reading and writing and mathematics, and should be exposed to the idea that there is much more than the basics if they’re interested. Similarly, everyone ought to know that programming is possible, that it can let you do some fun and useful things, and that there is more to computers than simply reading boingboing or adding another cat video to facespace. Early schooling needs to include exposing kids to a wide range of learning so they might have some chance of finding out what excites them. Give them a chance to try programming, soldering, woodworking, acting, running, cooking, playing didgeridoo, whatever it takes to start a person off properly rather than squeezing them all into tidy little boxes of tedium.

      1. Absolutely. It is time for schools to try and teach less rather than trying to fit more and more into the school curriculum.
        Reading, writing and maths, music, foreign languages and coding.(maybe), and some practical skill like woodwork or metalwork is all that seems necessary for learning to think in different ways.
        Beyond that all children need is to be able to distinguish reliable information from unreliable information and reliable informants from unreliable and they have all they will need to take them wherever they want to go.
        But then the whole point of education these days (at least in the UK) seems to be cramming so kids can pass more and more exams at ever higher grades, as that is the simplest way for politicians to demonstrate their effectiveness or otherwise.
        But, but, but, regurgitating facts is for the many, learning to think is only for the few.
        Do they really want an education system which teaches everybody to think?

        1. Reading, writing and maths, music, foreign languages and coding.(maybe), and some practical skill like woodwork or metalwork is all that seems necessary for learning to think in different ways.

          Don’t forget science. Finding out how to learn by experiment and observation is extremely useful, even for those who won’t become scientists…
          (Incidentally, I was taught programming at school (beginning with LOGO) from the age of about 10 to 15, and now program for a living)

          1. That is exactly what I wanted to write:
            I learned how to program logo in elementary school. I then went on to learning BASIC. I have used computers since I can remember and did graphic design on the first Apple computers. Now I teach teachers how to use and teach with technology and assistive technology in the classroom! Imagine! Technology has made pour world accessible to students considered “special needs” in the traditional educational; systems.

            I loved learning the programming and do feel that it contributed to my education even though I am not a programmer.

            Is there time left in our system, to add something new though?

        2. Maybe our coding problems would be solved if schools stuck to the three Rs: Reading, Writing and Regular Expressions.

  5. It would be awesome, but no one will pay for it.  You couldn’t get the voters of my state to pay the salaries of people who know how to teach programming.

    They won’t even pay proper salaries to those who can teach math! Or reading, or science, or art, or music, or social studies, or civics, or history…..

    These kinds of arguments and appeals are very inspirational, very cute, and very boring.

    It is just so easy to say “this is what we should be doing in education!” Yet practically no one who agrees with this person’s viewpoint works to improve education.

    If you spend all your time criticizing our educational system (its all wrong, we don’t know what we’re doing!) you will end up convincing people that its an impossible task.

    We spend a lot per student in this country on education, and we don’t have much to show for it. Why?

    Because a lot of that money gets spent on computers and science labs. This isn’t wasted money, but it’s not wisely spent. I spent a day in a German HS once ( a gymnasium). They had textbooks which were falling apart, absolutely no athletic facilities, NO TOILET PAPER IN THE BATHROOM (you had to bring your own). But every one of those kids was more proficient in math than anyone who went to my HS. Why?


    Spend money on teachers, no technology. Most of our awesome programmers learned to program after HS.

  6. Mitch Resnick covers a number of the reasons I had for introducing my son to Scratch when he was about ten, not the least of which was the problem of kids being not digital wizards but avid digital consumers. As my son is an artist interested in animation, I knew that aspect would be the initial, compelling attraction for him, but would likely not last too long as on Scratch it is sprite based. Thus he did some animation then got into creating games on Scratch and over the space of about three years did probably hundreds, then as a young teen his interest waned, but he says he’s still interested, just that he’s taking a break and re-evaluating what he wants to do with it. When I introduced him to Khan Academy’s Computer Science lessons (he’s just turned fifteen) he was immediately able to grasp certain concepts and read the programming. It seemed to me Scratch was a good gateway. Plus, he just plain enjoyed the hell out of Scratch and the Scratch community during the several years he was heavily involved with making games. It was fun! It was free! And very effective that as beginners they’re able to download the projects of others, learn from them, experiment little by little with introducing their own ideas, and move on to creating their own projects as they gain understanding and confidence. Rather than my thinking it was essential my son learn programming, I felt this was giving him an opportunity to pick up a little knowledge and determine if it was something he was interested in pursuing, and even if he wasn’t it would be useful experience. He is able to work now in Photoshop, ToonBoom, Garageband, iMovie, Audacity, and Protools (and has worked on Final Cut Pro) and I personally think his several years of experience in Scratch gave him confidence as he moved into working in these other programs, however unrelated. Facing menus, the intimidation factor was significantly lowered, and with those of the above that are not highly involved he had no problem with pure self-initiated learning and exploration.

Comments are closed.