Not everyone can draw/paint; not everyone can sing; not everyone can learn new languages proficiently; not everyone is good with numbers; not everyone is good at teaching; not everyone is good with working with other people; not everyone is athletic. And by this I mean that some will naturally be good at learning and ultimately mastering the above list of things, while others have to work much harder to get even close, with a lower ceiling.
Most importantly though, it's not up to someone else to decide whether you're good at something or not. Everyone should have an opportunity to take class or learn a subject and find out for themselves if that's something that they're good at or naturally inclined to. And if they're not good at it, it's not the end of the world because there is something else that's probably more suitable for them that's just as important to this world as coding.
The trouble we run into is that we often think of programming or coding as something more important or more sacred than other disciplines, when in reality it's just another in a long line of disciplines that takes practice and a little bit of natural talent.
Basic coding is rather simple and basically everyone can do that.
Actually writing/designing larger applications is a skill most people don't have the time/patience to learn, similar to how most people can write on hackernews/twitter/facebook etc, but only few people can write a novel.
Apart from the sequential understanding of how a computer operates, not everyone can express the goal in code that is, for lack of a better word, beautiful. Meaning 'easy' to read/follow, simple, expressive etc. And even less people can document/describe what happens, and even less people can see how the code they uses resources (cpu cycles,wait times,storage,etc) and thus cannot optimize appropriately.
1. Test - before starting any topic, make sure your student has a grasp of the prerequisites by giving them simple tasks. Just because you have taught them the prerequisites a week ago does not mean that they didn't forget.
2. When you are teaching them, talk as little as possible. The only thing you should be saying is the concepts.
3. Ask lots of questions. Ie: What is an object (expect them to repeat what you told them); What happens if (insert 10x different cases). Teach by asking.
4. Set 0 expectations. If you get frustrated its because you have expectations. Many people have self confidence issues. Being disappointed will cause your students emotional stress and they will not be able to learn. They might start to avoid asking you questions...
5. Listen. Many times, your students could be saying what you wanted to hear, but worded differently. Their analogy could have the same concept as yours but very different. Learn to recognize what students are saying.
I can't emphasize #3 enough. When I teach, I never say more than 2 sentences without asking a question. Because you quickly realize that people have a hard time retaining more than 2-3 sentences at a time.
You should 100% invest your time to get better at teaching. Teaching is a skill that schools robs from our childhood growing up. It helps you sympathize with people better, understand people better, communicate with people better, etc., all pretty real skills to have.
You have a bit of a goldmine here: there are _guaranteed_ a ton of people on here who wouldn't mind a bit of private tuition. Bam, instant feedback.
It may take longer if they're not as adept. They can try some strategies to assist coding, such as books, checklists, pair programming, etc.
Worded much better than I could have put it.