I started with Khan Academy.
Who knows how I stumbled across it - I think one of my teachers back in elementary school pointed it out to me. And then I found the coding course. I started, enjoying drawing the shapes on the screen with some characters. I was talking to the computer! I wasn't very consistent about it though, and my interest soon petered off.
Fast forward a couple months, I found my progress on those old courses. I gave it a whirl again. Who knows what the difference was, but this time, I was hooked. I worked through the Khan Academy JavaScript course, the HTML/CSS course, and parts of other courses. Then, I don't remember how, I stumbled on Python. My guess was I stumbled on it on codecademy. I really loved the language, and I started using it just as much as codecademy.
I think I should be clear that while I was enthusiastic, I was by no means very good, and I also didn't program all day and all night, though I did do it fairly consistently. I started messing around with programs of my own. And then, the beginning of last summer, two big things happened:
- I got a computer of my own, a snazzy new chromebook.
- I found Stack Exchange.
It was now much easier to code, and I had a resource I could go to with questions - though interestingly enough, I didn't first join stack overflow, I first joined Mathematics.SE, and then Physics.SE, which is still my favorite site on the network. I really discovered how much I could teach myself on my own. I had a goal, that is, to learn about quantum computing.
And I've progressed quite significantly. Along the way, I've worked on several coding projects related to that. Python is my favorite language. I've become a lot more able in Python - and where I'm not, given the internet, I can figure things out. I'm really happy right now, and I love what I'm able to do. There's more to this whole story that I've left out, but I'll leave it at that.
From what I've experienced, I'd point out several big things:
- Plant a seed, but don't force it. It took me months to get truly interested in programming, and even then I wasn't super consistent about it, but now I'm really excited about programming. Sometimes people truly aren't interested, in which case, move on. Perhaps they'll become interested at a later date, and even if not, at least they're aware that programming exists.
- Provide resources. I was able to get very far, very quickly, just due to having my own computer and knowing about stack exchange. Khan academy, codecademy, and other such sites were essential to my even starting in the first place.
- Help provide an inspiration, or some projects to go through outside of tutorials. I used the Euler problems, and right now I'm working on a bigger sort of project - to create a simulation of an ideal quantum computer (which ties in with my other interests).
- Let them fail, but also be encouraging. A couple months ago, I thought I had a working simulator for a quantum computer, for any number of qubits. I was ecstatic. And then, of course, I noticed an error in the results. I went from ecstasy to pure gloom. My dad pointed out, however, that I'd learned something. And so I had, both about quantum mechanics and approaching a project. I'm still really proud of the code I wrote, it just ended up being useless ;)
- Occasionally tremble in awe at their prowess. My parents have both been very encouraging. My mom watched me create shapes in the Khan Academy JavaScript editor, and more recently, appreciatively looked at a GUI I made in python that was rather hideous =)
Now, to answer your specific question about resources - I'd suggest starting with Khan Academy, which has a nice gamification system (energy points, etc), though codecademy, and some of the other sites provided at code.org are quite nice.
The Euler problems are good projects to try to solve, and they're very math-oriented, which your nephew should like. You could also encourage him to write programs that solve his homework (just to check it, of course). Try to provide projects and resources that integrate with his interests after he learns the basics.
I find Python a great introductory language - it forces good habits like indentation, you don't have to worry about low-level stuff like garbage collection, and it's really easy to read and write. (At some point, it is probably a good idea to learn a bit about other major programming languages like C, but not at the beginning.)
There are some great resources on this site as well about the order in which things should be learnt, other ideal beginner languages if for some reason you don't want to use Python, etc. I hope this helps, and best of luck to your nephew!