I have tried teaching programming and here are some things I would suggest other than the usual stuff:
- Do not assume that just because you think a topic is simple, it will be simple for your student to understand. Remember you have done this thing many times over the years. So now it seems trivial to you but probably not to your student who has never done it before. So be patient and go slow.
- Everyone learns differently. Figure out what works for that specific student and use it to your advantage. If you user is a writer who wants to learn how to program, try and use some references to writing if you can when explaining a concept.
- Focus on the negative cases. Teach a specific concept (say pointers in C or vector in Java) not just by showing an example program that works. Teach it by breaking the program and showing how the compiler/interpreter etc. behaves when something does not work the right way.
- Try and use pictures/diagrams to illustrate a concept if necessary. For example, pointers can really be explained well if described in pictures where you show the address, the value etc. and how they are related. For example, when you say int * p, what really happens.
- Teach them how to "design" a program for larger programs. For example, I was taught to use nouns and verbs where nouns usually become class. Something like that. But knowing how to design an app is very important in my opinion.