“How do we teach programming in schools?”

On a busy forum that I subscribe to, a forum member started a very active thread with the question “How do we teach programming in schools?”.

Although the original poster of the thread asks “How?” can we teach programming in schools, there are many responses to “What?” we should teach. Maybe rephrasing the question might have changed the responses, eg. “How can we teach children to solve problems efficiently using Computing?”

When I first trained as a Design Technology teacher in 1992, the emphasis was on teaching children to design and develop solutions to problems and then to make and test the solution they designed. In 2000 when I taught ICT, it felt more like I was teaching by instruction, eg. “Do this … to achieve this …” with very little design or problem solving at all. As I become more confident in my third phase of teaching, as Teacher of Computing I feel that my “How?” is now more about me asking myself what I want children to learn and then planning experiences in which they may learn and discover these things for themselves.

I worry that if we obsessively focus on the tools that we use, our teaching becomes, for example “Learn Python” rather than “Learn to problem solve using text based programming languages”.

I would encourage fellow Computing teachers not to worry too much about which specific tools to use, but instead to consider how they can best incorporate more of the following learning experiences into their classrooms:




Problem Solving


Their pupils will thank them for it through demonstrating higher levels of engagement and better behaviour.

Sabotage is one example of a teaching approach that I’ve developed to help shift the focus away from learning programming for programming sake. I keep promising myself I’ll write some blog posts about the other approaches I’ve developed, though I believe it’s much more powerful to experience it yourself rather than read about it.

Unfortunately, there is no magic recipe or secret formula to successfully teach programming in schools. I believe that if the teacher feels confident in their own understanding and is not too concerned about the detail of the curriculum, as their own confidence grows they will develop their own pedagogy and methods. For even the longest journey starts with just one step.

7 Comments Add yours

  1. Aristotle said, “we learn an art or craft by doing the things that we shall have to do when we have learnt it: for instance, men become builders by building houses, harpers by playing on the harp.”

    If you agree with Aristotle (and that’s a big if) then you have to ask yourself what you’re doing, as a teacher, to facilitate the practice of the skills of the craft you’re trying to teach. Furthermore, as a teacher, are you correct in your assumptions about what such a craft entails..?

    All music teachers are also musicians. Are ICT teachers also programmers..?


    1. teknoteacher says:

      To become proficient in a craft you must practise often. So one might question how far and often a teacher needs to go in order to understand the practice of said craft.

      I also wonder if there is a point at which a teacher practises the craft to such a high degree, eg. programming that their practice of teaching becomes less proficient?



      1. Hehehe…

        In an ideal world (that we obviously don’t live in) I’d say a person who has mastery of their craft (be it house building, harp playing or programming) ought also to be a good teacher because:

        a) Just being around such a person and interacting with them is an educational experience in itself.

        b) Such a person would understand that teaching something is also an amazingly useful way to learn about that thing too.

        c) One suspects that such a person would also be a “lifelong learner” who is open to new ideas and always trying to find ways in which to learn and improve their craft – thus setting a good example to their peers / fellow “students”.

        Appearing to be “just” being a teacher of a craft rather than also being a practitioner of said craft appears to be throwing out the baby with the bath water.

        Imagine how much students would learn if they collaborated with their ICT teachers to create the school website, write the email automation system for communicating with parents or designed the database for recording grades..? After all, students rehearse, compose and perform in the school concerts alongside their teachers, why shouldn’t they contribute to the school’s life in other ways too..?

        😉 #devilsadvocate


  2. Chris says:

    Using text based language is always a jump as everything must be typed just right to work (that’s before you even start thinking about whether the actual algorithm is correct). I’m just old enough to have school-days computer programs entered on cards and sent off for batching. Imagine the disappointment when, a week later, you got an output that was much thinner than anticipated because you’d spelt something wrong.

    This is, I think, where Sinclair’s genius stepped in with the ZX computers. The basic keywords were tokenised for compact storage so why not put them on the keys? Brilliant – wonder if a modern form or some sort of live syntax checking could be applied to python – always nicer to get a hint as you go rather than a disappointing stop when you press “GO”!


    1. There are many Pythonic IDE (integrated development environments) that have the facility to check syntax, auto-complete keywords and even suggest class methods, function names and arguments. Many of these cost money although some (such as PyCharm: https://www.jetbrains.com/pycharm/) have free community editions that could be used in the classroom.


  3. Mark Guzdial says:

    There are some excellent Python implementations that run in the browser, such as in the Runestone Interactive books: http://interactivepython.org/runestone/default/user/login?_next=/runestone/default/index But I mostly wanted to point out that students don’t learn problem-solving from programming classes. This is the classic meta-review on the lack of connection between programming and problem-solving: http://rer.sagepub.com/content/60/1/65.abstract. And here is a paper on one of the few studies to show that one can teach problem-solving using programming (not that problem-solving is learned through programming, but it’s possible to use programming as a context or medium): http://home.cc.gatech.edu/csed/uploads/2/klahrcarver88.pdf


  4. johnm says:

    The common mistake is to think that code can be designed and written at the same time. ‘Programming’ is just one step in a sequence that goes …
    Analysis, Design, Implementation (of the Design) or Programming, Testing, Evaluation, Maintenance. The whole sequence is called Software Development.
    For exam purposes, candidates are often asked to evaluate their ‘program’. If there has been no prior Analysis or Design, evaluation becomes impossible.


Leave a Reply

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

WordPress.com Logo

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

Google photo

You are commenting using your Google 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