Question: My younger brother is looking to start programming. He's 14, and technically-inclined, but no real experience programming. He's looking to me for guidance, and I don't feel as if my experience is enough, so I figured I'd ask here.

He's more interested in web programming, but also has an interest in desktop/mobile/server applications.

What would be a good learning path for him to take? I'm going to buy him a bunch of books for Christmas to get him started; the question is, what should he learn, and in which order?

The way I see it, he needs to learn theory and code. I'd like to start him off with Python or Ruby or PHP. If he wants to get in to web, he's also going to need to learn HTML, CSS, Javascript, etc.

Out of those three domains (Languages, Theory, Markup/Etc.), what is the best order do you think to learn in? Also, am I missing anything?

Thanks!

Answer: 
Does his high school offer classes in computer science? For example in the United States the Advanced Placement program has a computer science class that goes through quite a bit of the basic computer science concepts (flow of control, basic object oriented development practices, loops, etc.). 

I was able to attend a high school that offered computer science courses for basically all 4 years (from an introductory course through to basic LIPS, MIPS, and Open GL). I ended up testing out of the basics in college and then re-learning a lot of the other languages and topics in upper level courses. I can tell you that 14-17 year old brain had a lot more difficulty wrapping around the theory than an 18-22 year old brain did. Topics like recursion, pointer arithmetic, low-level programming, network topography, and functional programming took me a long time to get in high school, but the second time around in college I found them to be a breeze, perhaps because I'd already tackled them but also perhaps because of what developmental scientists have proved about the young brain - some of the abstract thinking required for higher math and CS concepts is still developing.

Even though it was difficult, thinking through CS starting at 14 is extremely helpful. Doing it without teachers seems like it would have been complicated. I would've spent time developing web pages for fun because it's what I loved to do back then (and now), but I would never have taught myself pointers, recursion, and LISP for fun at the time.
I personally wouldn't start with the hardcore theory. I'd start with practical programming intermingled with some elements of the theory. It could keep one much more motivated and not scare him off.

It is for instance a case with musical schools. A huge portion of students quit because they get bored with the theory and eventually lose interest.

Besides, the theory is not that good when it is learned before having gotten your hands dirty with practice. You won't know when and how to apply it.

But if you had some theory knowledge then practiced a lot, after that a serious course in IT would push you on a different level. Otherwise the years spent in a university are just wasted on a deaf year.

In that order:

1. Some basic theory about hardware, computer architecture and programing that hardware. Just basic.
2. Then develop practical things. Basic applications to keep interest. First local, then something with graphics. Web pages not yet since you would want to demonstrate the server-side programming and it is often useless without databases.
3. Drop him some database knowledge crops
4. Interface you local application with the database. Then try web development.
5. Adjust the course as you go.