In my current workplace Codurance, there's a program called Software Craftsman Apprenticeship in which developers with working experience but not fully ready to be a Software Craftsman are recruited with salary. They will take a three month courses to learn everything covering Extreme Programming, TDD, Agile etc. Myself has been through that and it's one of the best things during my career.
This time, I got the precious opportunity to teach apprentices for two weeks in cooperation with my colleague. It's about Classical TDD and Design Patterns, among other stuffs. And I would like share some of my takeaways on teaching.
For the start of everyday, the week, or even the whole program, students should be told about what's to be expected from them. So they could have a target to work towards.
It's also a good practice to let them write down the expections they have for themselves. And then compare the result with it at the end of that period.
I definitely prefer to learn from own experiences. To learn TDD, what can be better than a coding experience while applying the principles? The katas are tailored with those principles in mind, and proved by time.
Minimal instructions are provided before the practices. The time should be spent on retrospectives among all students and instructors. But it requires thorough preparation and understanding of the katas and topics from the instructors.
Only jump in until some fundamental disciplines are broken, like TDD cycles, or students are blocked for too long time, or they've got nowhere to proceed.
For the latter two cases, just a reminder of baby steps or language syntax are all the need. Anyway, make sure students get most out of any practices.
When something is hard to learn by practices, a style of self learning called Extreme Learning is recommended. Students are required to study on a topic in a limited of time and give a presentation on it. It exercises both the topics and the presentation skills.
As for the teachers, they should raise questions during the presentation and answer questions as well. Through discussions, time will be spent on those attract more confusions instead of well known stuff.
Same reason as above. Being a teacher some dedicated sessions for sharing could be arranged. But my students are so great that I don't have to mention it at all.
At some points of the program I had unanswered concerns on several topics. So after students had finished their practices and obtained their own understanding, I asked for their opinions and it triggered another discussions. That turns out to be my best memory of that day.
Publicly or privately, mutual feedbacks among students and between students and teachers should happen.