Learning to Code though Problem Based Learning


The Open University's recent 'Innovating Pedagogy' publication  names ten 'up and coming' teaching approaches that are set to become commonplace in education. One of these is Computational Thinking (including, but not restricted to, learning to code). I'm a huge fan of teaching children to code, both for the technical skills of programming that will serve them well in any future careers and for the habits of mind, the problem solving skills, mental agility, and ways of thinking that coding encourages.
Michael Himbeault
  on Flickr

 But I've always felt slightly hypocritical pushing these ideas given that I didn't really know how to code myself. So I decided I needed to learn. I have to admit I wasn't starting entirely from scratch: I wrote basic Basic programs on the ZX Spectrum as a child and sat through Fortran classes during my undergraduate degree, but neither really left me with a feeling that I knew what I was doing when it came to programming.


I decided to learn Python which seemed like a common, useful language to use and I took a problem based learning approach more by accident than by design ( I had some data that I want to analyse). Luckily my husband was on hand to help. While he didn't know any Python himself he has a very good working knowledge of quite a few other programming languages . This general knowledge, it turned out, is much more what learning to program is about than the actual syntax involved in a specific language like python.

To be honest I've always been very skeptical about problem based learning, but this was an opportunity to put it into practice and try it out for myself.  My main concern related to cognitive load: problem solving is highly taxing cognitively, is it really possible to have spare capacity learn new ideas? Secondly, I was concerned that without a thorough grounding in the fundamentals it would be impossible to really learn higher order concepts. And anyway, how would I know what those fundamental concepts were?

 There are three main things I learned from this experience.

 1) Goals. Firstly having a goal, particular a self defined goal is highly motivating. But too much emphasis on getting to the goal means learning can become neglected along the way. I often found myself copying code from examples online, and if it worked I moved on without really understanding why. If, however, I needed to adapt the code in some way then often I got stuck and ran into problems.

2) A teacher or mentor is essential. Problem based learning by its nature is not structured or scaffolded,  concepts are not going to be learned in an ordered, designed fashion. This means I found myself doing things beyond what I really understood, without really understanding that I didn't understand them!  For example, I began using 'dictionary' data types before I fully understood how lists and strings operated. The result is that I often got completely stuck. If I hadn't had someone around to help, I may well have given up.

3) Frustration. It felt a very frustrating process, and while I often managed to get programmes working, I was also often left with a nagging feeling that I didn't really understand what I was doing.

 John Hattie (in this 2-minute video) discusses inquiry based learning and the very low effect sizes (0.3) that have been reported in the literature (from meta-analysis). He says that the key to making this type of learning successful, is making sure you give students a grounding in the fundamental concepts first, so that they are ready to build on them productively in open ended tasks. This makes sense and would actually make the whole process of learning through problem based learning a lot less frustrating.


Can this work the other way round? For the second stage of my learning 'journey' I took a slightly different approach. I was given a python book for my birthday (I know, so romantic)! The book is called 'Automate the Boring Stuff with Python'  and it's brilliant, I highly recommend it. I feel that working through the book has really consolidated my learning  - I've had so many aha moments as things that I come across during the problem based learning phase, suddenly become clear. But I also think I would have got a lot less out of the book if I hadn't come across some of these concepts already or had practical experience of them.

 This post was originally going to be about my terrible experience of using problem based learning to learn to code, but by consolidating my knowledge using a more traditional approach I can see the benefits of problem based learning, so long as it is not used alone. For me at least, doing problem based learning followed by the more traditional scaffolded, ordered knowledge acquisition has been successful.  I don't know if any research backs this up. I can't help also wondering how good learners really are at judging their own learning: studies show that learning which is more effortful leads to better long-term retention of information and concepts even when the learners themselves judge the learning to be less successful. Perhaps this was the case here, and the rather more frustrating and difficult problem based learning approach was actually leading to (or at least setting the scene) for better learning later on.

Do you have experiences of learning or teaching with problem based learning?

Recommended reading: Michael Seery's two blog post for  Education in Chemistry:
The case against Inquiry Based Learning
The Case for Inquiry Based Learning


Learning to Code though Problem Based Learning by Anna Wood is licensed under a Creative Commons Attribution-NonCommercial-ShareAlike 3.0 Unported License.
 

Comments

Popular posts from this blog

Gove confirms mandatory housebuilding targets for councils will be abolished in face of Tory rebellion – UK politics live

Kotak Mahindra Bank Recruitment 2022 Released for Graduate Candidates And Apply Online