There are, IMO, two decent self learning approaches,
1. The dive in one programming language with real life applications that could encourage the individual to keep learning. I suggest ”Python Crash Course"

2. A more general learning approach, language agnostic, thus, the individual can make up his mind down the read on which language or languages would like to dive in after, for this one I suggest, "Code: The Hidden Language of Computer Hardware and Software" by Charles Petzold

Hope this helps.