Many researchers write and use software, but few receive formal training. Software Carpentry, largely run by volunteers, offers two day workshops around the world to equip researchers with core skills for better programming.
Three years ago I attended my first Software Carpentry workshop at UCL, where I learnt about scientific Python, test-driven development, and shell scripting. Last week I joined around 40 people at TGAC for a Software Carpentry Instructor course, led by Greg Wilson, Bill Mills, and Aleksandra Pawlik. I have cherry picked a few of my favourite bits:
"Motivation is the single biggest predictor of outcome"
The primary predictor of a student's success is level of motivation. So for a teacher, creating enthusiasm (or not killing it) is as important as giving knowledge. Teaching should be treated as a performance, inspiring confidence and encouraging participation.
After sharing stories of the times that we had been demotivated as students, Greg noted that most of the negative experiences could be grouped into either feeling 1) ignored or 2) unfairly treated. So be inclusive and be fair.
Know your students
Tailor lessons to the distribution of prior knowledge in the class. Pre-course assessments can help to set the starting point, but care is needed to avoid scaring students away or capturing meaningless information (for example, watch out for the Dunning-Kruger effect). The Software Carpentry pre-assessment for learners is here.
'Formative assessment' can be used to guide the learning process. One example is asking multiple choice questions during a lesson, where incorrect answers have diagnostic power (for example, see this discussion). Ask students to vote for answers by holding up coloured paper. After the first round of voting, encourage pair discussion, followed by a second vote (there is a nice example here).
Adapt to the class, focusing on the areas that are most needed. This is the curse of the MOOC: students often don't complete online courses because they skip the bits that they know or don't need to know.
A good community-builder introduces people by highlighting their shared interests. A good teacher introduces new information by linking it to existing knowledge.
Draw a 'concept map', outlining the subject and describing how individual elements link together (see, for example, this map on command line parameters and this one on stripping climbing gear). Use the map to guide the lesson plan, creating a path from current knowledge to the learning goal.
When teaching, avoid referring to new concepts before they have been taught ('forward referencing'). Apparently we can only hold around seven temporary thoughts at a time, so don't waste head space.
Feedback is crucial
During the course we were frequently encouraged to give feedback, for example by handing in comments at the end of lessons (try Googling "Software Carpentry feedback" and you'll see how seriously the team take this).
One of the activities that I found most useful, and most uncomfortable, was taking turns to teach and receive feedback. My first attempt is here (there was no planning time, so the content is just a stream of thoughts).
Reviewing the video highlighted my defensive body position and 'constant' voice, so these were areas I worked on next time around!
One of the great things about encouraging feedback in class is that it not only helps you to improve, but it shows that you value the opinion of participants too. Win, win.