Why Do I struggle Learning to Code?

Why Do I struggle Learning to Code?
I’ve broken this post into five bits depending on your aims as a reader. Dip in and out as you wish.
1) Is just about me. Skip it, its dull and inefficient. But do look up Effective Altruism.
2) Explains the core theory in this blog post. Its cool, probably need to read this to understand the post.
3) Explains implications for self learners and teachers alike with tips. If you have tips say them in comments. I always like copying good ideas.
4) Describes how I’ve applied it to learning to code. This is of interest if you’re learning to code.
5) Is extra info, like if I refer to an app or an idea its at the bottom. If you have a question about something, if I have time I will add answers in there too. Lots of links to effective altruism. I like it alot.
Please note: most of this comes from the excellent Visible Learning by John Hattie and the also excellent Why don’t Students like School, by Daniel Willingham. For more details have a look at their books. Links are embedded but also at the bottom.
Part 1: Introduction (skip if you just want the idea)
I am a mathematics teacher, first year Teach First. I completed a history degree prior to making the subject shift to maths.
Why I hear you ask? Well firstly, I loved maths at school, I loved problem solving and the skills of spotting patterns and trends to find answers (which is why I enjoy history.) I liked the mentality of mathematicians:  their focus on efficiency and on systematic approaches to problems. Secondly, it seemed like the world lacks maths teachers in a way it does not History, and since both are qually valuable, maths teacher seemed to be higher impact. Finally it was because, I was a bit rusty and this was a great way to improve my maths, though admittedly a slightly extreme way.
What caught me up whilst I was doing my training (and still does) is the rise of cognitive theory and its involvement in maths. This is kind of natural for me, I’m an effective altruist, and am obsessed with evidence based charity, aka using scientific methods to measure the impact of charities, and picking the best causes from this evidence. So when I was introduced to Cognitive science based teaching by Kris Boulton at the Summer Institute, who in turn led me to John Hattie and Daniel Willingham, then research ed and the evidence based teaching movement. It was a pretty natural move. Today I’m looking at one part of Cognitive theory, Cognitive Overload Theory.
Part 2: Cognitive Overload Theory:
Disclaimer, this is designed for people with no prior knowledge, so I’ve tried to keep it simple. If you spot mistakes do give me feedback in comments below and I will make adaptations and improvements (I may even put you at the end of the article if you’re nice about my failings. Flattery works.)
The idea that has most impacted on my teaching from these thinkers, is cognitive overload theory. This is an idea I first came across in Willingham’s book. The basics of this idea, is that we have limited working memory. We can only hold onto several pieces of information at a time. E.g. If I ask you to hold onto this random chain of number 925627382 there will be a limit to your memory, without some method. This means, when we learn new information, being bombarded with too many ideas, facts, skills, causes our minds to overload and we just basically crash like a compute with too many tasks. Less dramatic but still equally stressful. Nobody quite fully knows about this, but they think its pretty fixed.
Question: So Tom, if this is the case, why do some people struggle more than others? Surely we would find new skills and info equally difficult, apart from larger working memory capacity.
Well most importantly, according to the theory, is prior knowledge.
When you’re taught a new skill. If you can already do a lot of the skills required so well that they’re basically instinct (e.g. 1 + 1 = … you can almost certainly answer this without thinking about it) then these parts don’t need to be held in your working memory and you can instead focus on the new information. Less to think about = easier to retain new information. The key is that these prior skills need to be very well ingrained, so that they are automatic (its called automacy.)
Analogy: Your computer can do tonnes of stuff in the background, really quickly and they seem to barely affect the speed. If you start watching you tube, it can do this quickly. When I open YouTube, Sims (my word its slow on computers), Spotify, Excel, I-player, and Age of Empires, it breaks down.
Example: Say I’m learning about expanding brackets. If I can multiply really well, and can multiply algebraic terms well, then you can just focus on whats happening with the brackets. On the other hand, a student who struggles with these skills  when they see the problem 3(x+ 7) is too busy focusing on what happens when you multiply 3 and x (is is 3x or x3?!), what is 3 x 7 (21, 18, 27, 49?!) When is x an x when does it mean multiply? The question of what does the bracket actually mean? is lost in the chaos of questions and memories they are trying to pull up. Like your computer, your mind just crashes. And you can barely remember anything you were taught, just the stress of the lesson.
Part 3: Applying the theory, as a teacher leader or self learner (also, teachers are definitely leaders, so I’ll just call that part leaders, but I mean teachers too)
A lot of these ideas are inspired or came from Willingham and Hattie’s books. These are the ones I found worked well, but also have adapted as a coder and teacher – I have used them all and to varying degrees been successful.
a) Breaking things down in steps, is great. It gives people checkpoints to hold onto, and refer back to.
Leaders: If you’re presenting info, giving people these steps to read over whilst you’re talking or after means that those who find it harder can have more time to think it through. I’m big on copying out my example, because then students have loads of time to refer back to it any time.
Self-Learners:  Do it for yourself, go over a key example several times and try and explain it in steps. A cool way of doing this is the Fenyman technique (see Cal Newport for this….)
b) Minimize excess info. To minimise cognitive load don’t bombard people with info or break your flow.
Leaders: So, when you’re talking about expanding brackets, half way through, don’t start going on a tangent about what you did last night, or how expanding brackets got you a date (I assure you it never has for me. Its all lies kids). Also clearly label them, and try and keep explanations tight, and concise.
Sidenote: Students, don’t misbehave during an explanation. You’re making it harder for everyone to follow the steps. Honestly. Please. If you have automacy in the core skills and understand, you’re just being selfish.
Self Learners: Break things into steps or detailed information into chunks/bullet points. When you write steps/bullet points, cut out unnecessary nfo. Use a mnemonic if you can to remember the steps or facts. Or sing it. Rap it. Draw it. Dance it.
c) Drill the core skills that come up alot. E.g.Multiplication is a core skill, it comes up tonnes in maths and life (and people seem to be pretty impressed by doing it quickly. If you want to get phone numbers using maths, try this one I’ve actually seen it work.) Gaining automacy in everything is impossible. But targeting key skills, ideas, definitions in a topic is good. I’ll talk about interleaving in another post I expect.
Leaders: Identify core skills that come up loads, and that learners struggle with. Get people to practise loads. Make it fun. I do times tables to music, somehow students often like this. Also add pictures, neumonics, games in to make it less repetitive. I fail to make it fun alot, I need to do this more often.
Self-Learners: When you’re learning a new topic identifying these is hard, so ask others. Use memrise as an app, or anki cards, go old school and do index cards. Make it fun, make it a game – give yourself food, rewards, high fives. Test it out on prospective partners in clubs. Tell me how that goes.
d) Practise the skill lots:  Just keep doing the skill over and over. Gradually build up the difficulty so that each time the student has new ideas but not too many to grapple with. Very carefully laid out worksheets and questions work well here. Sadly though this is very time consuming.
Leaders: Check your worksheets for any very sudden jumps in questions. Have students had enough practise? Find ways to differentiate, enabling some students to speed up quicker but that weaker learners just practise much more similar questions. One way I like is green students do a sample of questions, whilst amber have to do all.  Don’t write worksheets though, argh that takes long. Just adapt and change if you can. And pick better structured ones.
Self-Learners: You may think ‘practise is boring I can do this already.’ Feeling cocky? Remember, how cocky you felt today, tomorrow (or a week later) when you struggle to remember much of what you learnt and are scowering through stack overflow for that really good comment. Do a few more practise questions, or do some slightly harder ones before moving on. Make some good notes. Its about gaining mastery not just passing.
Part 4: My Struggle with Javascript (or JS, because I keep confusing people by calling it Java and giving away I am a total beginner….)
Coders are great at many things. But they are obsessed with problem solving based learning. My guess because thats how they learnt, and the ones who write the text books and guides online, are the ones who succeeded not the ones who failed. Which is good – I don’t want to learn how to code from people who can’t code. However, firstly, they could have learnt quicker using cognitive overload theory, and more people would not have given up after reaching a wall if they used it.
So for me, whilst learning to code. I have been trying to use the website memrise alot. Learning lots of facts and what different words mean. However I haven’t found a very good one so am gradually making my own notes using Stack overflow, eloquent java and memorise. One day I will make it into a memrise. Also another issueis that nobody has designed a memory card set that matches a set course of learning. It would be great to have memrise cards that fitted the flow of a course. (Codeacademy consider this, it would be low cost but could have a high impact!)
I am also trying to write out processes and core steps using the Fenyman technique. This is time consuming at times, but especially earlier on in my coding, what I am learning are, I assume, basically skills and my pace of learning will gain from acquiring automacy. I file these notes carefully so I can refer back to them as a guide. It also means, hopefully, when I’m building a new function, I can do loops so well that I can just focus on what the function is meant to be doing. Increasingly I’m spending less time googling the same facts I googled yesterday too. I will cut this back later on in my learning and use it to target when I struggle with a topic but for now I’m still learning core skills.
Finally, I’m trying not to over pace myself. I’m focusing on practising a skill more before moving on. Making sure also I can do that skill really well, not just well enough. I have found in the past I ramped up too quickly, and the next day had forgotten everything so then struggled with a new skill. (I should add, bad use of the word forgotten, I just struggled to retrieve the information.) The classic issue that coders have, where they face a problem too hard, is partially the teachers fault, but its also my fault for trying to wizz through to making my own app and becoming a billionaire. I will be a billionaire. But it will be at 30, not 23….
As always before the extra info, if you enjoyed this post, didn’t enjoy this post. Do give feedback in the comments. I’m Dyslexic, and try to mitigate against its effects, but am still very prone to typos and grammatical error (something I’m working on) so if you spot something let me know.
Part 5: Extra info
Firstly, effectactive altruism, is about making charity more effective and having the highest impact as possible. A few good places to go to learn more about it are:
Willingham’s book is very readable, and well structured (in fact it inspired my structure.) He has examples, evidence and then tips on how to apply it in practise. A lot of the tips on here are from the book, but also combined with my personal experience of which ones I found useful. Willingham is great, and I love to read about it.
Hatties book is good, its more a long review of papers and research so its more heavily evidence based and also very concise. It covers alot of topics too. http://www.amazon.co.uk/Visible-Learning-Science-Learn/dp/0415704995/ref=sr_1_4?ie=UTF8&qid=1460102199&sr=8-4&keywords=visible+learning+hattie
The Fenyman technique is something that I only recently came across from Cal Newport. I read his book deep work (which is great.) I particularly like this as I’m a big Richard Fenyman fan too. This is http://calnewport.com/blog/2015/11/25/the-feynman-notebook-method/
My idea for memorise comes from Kris Boulton’s blog. He did an awesome experiment where he tried to learn all the capital cities and countries in the world.
Kris also inspired my great love of drills – found here: https://tothereal.wordpress.com/2015/05/04/is-drill-practice-boring-and-pointless/
Another blog about learning to code, and has some great tips is from http://www.startuprob.com/learn-to-code/
Anki cards are here. http://ankisrs.net/
 As they say in John’s home town, don’t forget to be awesome!