Actually, I think you were referring to my comment about teaching my brother(15) C.

I think your observation about someone finding it not fun and then never choosing to "upgrade" is appropriate for some. What I think it important is evaluating the person and determining what language would be most appropriate for them. In your son's case, GameMaker might very well be the most appropriate thing for him. You're probably the best judge of that. I don't think that anyone else could profess to know your son better than you. But that doesn't mean that something like GameMaker is appropriate for everyone learning how to program.

For instance, in my brothers case, I think he'd actually get bored with something like GameMaker. My first thought as far as a programming language was something like VB, because it's graphical, quicker to develop GUI's and the editor reduces the need to look up syntactical things. But the downside was that he wouldn't know what was really going on. If he was younger, I might have introduced him to VB, but not where he is now.

There were quite a few things I took into consideration (and I think that others should take into consideration when trying to introduce someone to programming). The first was (and I hate to use the term), IQ. That's not the exact term I'm looking for, but it's as close as I can come at the moment. I might just be biased, but I consider him to be extremely bright. At 15, he has logic and deductive reasoning skills beyond people I've worked with. Straight A student who's taking the AP math and science courses for the grade above him. Math and general logical thinking has always come naturally to him.

Next was his general disposition towards problem solving. He loves solving problems. You could even say he thrives on it. So there isn't a need to introduce him to problem solving, just to show him how people go about that when designing a program.

Next was taking a look at where he might go with programming. I knew that he was planning on taking a C++ class next year (this fall now) in school.

With all of that, I felt that C would be the place to start. So far so good. He has a pretty good understanding of pointers and malloc and that's what I was hoping for. Now, when he's using any other language, he'll know that there's much more that goes on behind the scenes. I'm a firm beliver that you should, at some point, teach a person the building blocks. When I've taught anyone about general PC functionality, I always start with DOS. Down to the level of what really happens when you turn the computer on. I think things like that go a long way to demystifiying the process. But again, that might not be for everyone.

So I guess my point is that there's probably no one language that is appropriate to teach everyone. As with anything, the material should be adapted to the audience by figureing out what is going to give you the best distance/mileage ratio.