This post relates to my edtech start-up feynlabs
For more than half a century, we have been programming computers.
But yet the teaching of programming has not changed much
However, the range and motivation of learners has changed radically
For instance, I know someone who is learning to code Python at age 63 for the first time. He is based in the USA (I am based in the UK) and I help him online with learning Python. It’s amazing how far he has got with simple help from me and others.
Considering that we now have a range of people with a variety of motivations wanting to learn to code, I believe that we need a change in approach
Various things are being tried out: Online forums, The Wizard/apps approach, Classroom based training, MOOCs etc – but in most cases, they are adaptations of historical techniques.
Here are some ideas I am using in our work and online trials at feynlabs trials
Welcome thoughts and comments ..
The approach we are using is inspired from a discipline normally far distant from programming - High performance sports /endurance skills coaching
In this context, when I say ‘coaching’ it does not refer to your typical NLP coach.
Rather, I mean the Olympic level performance coaches like Matthew Syed (Bounce: The Myth of Talent and the Power of Practice [Paperback] ) and UK athletics coach Brian Mc Kenzie who focuses on endurance training (Power, Speed, Endurance: A Skill Based Approach to Endurance Training)
Here is an example .. The Eastern European approach to training was based on teaching the core fundamental concepts first and then the first degree derivatives and the second degree derivatives.
Consideration must be given to the approach adopted by the former Eastern Bloc countries to technique training. The aim is to identify the most fundamental version of a technique, one that is basic and essential to more advanced techniques. Example for the shot – basic model would be the stand and throw, more advanced would be the step and throw and finally followed by the rotation method.
This fundamental component is taught first and established as the basis for all further progressions. Deriving from the fundamental component are exercises that directly reinforce the required movement patterns. These exercises are known as first degree derivatives. They contain no variations of movement that may confuse the learner and second degree derivatives and so on
Then we have other techniques -
1) ‘Whole part whole’ instruction – show the big picture, then the steps and then combine those steps to solve bigger problems
2) meta patterns(as in chess) where Grand masters store thousands of game situations/patterns and get the optimal answer based on applying patterns from memory ..
How does this apply to learning Python (or any programming language)?
As with many forms of skills acquisition, the sequence of steps and the practise at early stages will make a difference to learning the skill Ex:
a) Python has two forms of division – normal division and integer division. The integer division could be taught in the first derivative(using the eastern European training example above).
14/3 = 4.66 vs 14//3 = 4
b) More seriously, using local Python variables with same names as global python variables. Again, this can be better understood as a second stage after you understand functions and the passing of variables in Python
Image – wikipedia – Liverpool football club coaching staff