IMHO, learning to program means to become able to understand the concepts of a programming language (no matter which), i.e. loops, if-else statements etc. and how to apply these to implement solutions. This is a separate issue from solving the problem itself, i.e. coming up with the solution.
For exmaple: a programming language will not help you by itself come up with the numbers of the Fibonacci sequence. You have to know the algorithm first to come up with the sequence. Then you have to understand how to apply the programming language to implement the solution to come up with the numbers.
First, teach the person basic problem solving skills without touching programming. Then teach him/her the basics of programming in a language of your choice. Use the programming language to implement solutions for problems but always make sure that the person also understands how to solve the problem without the help of a programming language. The programming language is a tool to come up with the solution, not the solution itself.