The truth is what many of us consider to be basics - big O notation, b-trees, so on are not really needed by the average programmer. They might be useful (I get use from them) but they're not necessary.
Likewise, getting into intimate discussions on file encoding or strings in memory just isn't going to be retained by someone whose major interaction with a computer is facebook.
Focus on practical tasks, but take time to explain what code is doing in plain english. If you've done rubber duck debugging, you're aiming for that level of simplicity in your explanation. Avoid technical words, use simple metaphors and generally avoid the history lessons. Once you establish a baseline of skill in the developing programmer, swap the roles - have them explain their code to you.
I'm not even talking about big O or algorithms & data structures.
I'm talking about the basic concepts of function, iteration, abstraction, indirection etc.
Yeah those are definitely things that new programmers need to learn, but they usually need to learn them by doing things the hard way a few times first.
"yeah, that's a lot of copy and pasting isn't it? Want a neat trick to save yourself some effort?"
I have as well, I'm happy to report out of the last 5 non-programmers or very-new programmers I've trained, 3 are senior engineers and 2 are on-level engineers and I'd gladly work with any of them.
Likewise, getting into intimate discussions on file encoding or strings in memory just isn't going to be retained by someone whose major interaction with a computer is facebook.
Focus on practical tasks, but take time to explain what code is doing in plain english. If you've done rubber duck debugging, you're aiming for that level of simplicity in your explanation. Avoid technical words, use simple metaphors and generally avoid the history lessons. Once you establish a baseline of skill in the developing programmer, swap the roles - have them explain their code to you.