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: 
I *really* like the way that I came into programming; the only thing I can imagine changing is my access to books. My family didn't have the money for all the books I could devour, and our small rural library didn't exactly stock tech manuals. In the grand scheme of things, this is a small nitpick.

I wholeheartedly disagree with those who say you can't learn theory at 14. The earlier you learn the theory, the better. I read [*The Art of Computer Programming*](http://rads.stackoverflow.com/amzn/click/0321751043) at 14, though I'd already been coding a while.

The best thing you can do for your brother is to give him the tools to pursue his interests, and include him in the hacker/coder community whenever possible, so he can learn the *mindset* of a great coder.

* Nudge him away from proprietary tools wherever possible. There's so much more available to him in the open source world. I got as good as I am largely due to the guidance I received from more experienced folks in the open source community.
* If you can afford to, get him a [Safari](http://www.safaribooksonline.com/oreilly/knowledge/?cid=201012-orm-safari-knowledgewebhome) account, or help him buy books when needed. Even lending what you already own can help.
* Make sure he has access to a decent desktop or laptop *and* a server or VPS to experiment on. If mobile apps are his thing, make sure he has a phone or demo device to work on.
* Show him how to find IRC channels, mailing lists, etc. for the things he is interested in working with/on.
* Make sure he knows [how to ask smart questions](http://www.catb.org/~esr/faqs/smart-questions.html) and, conversely, the particulars of a [support leech](http://www.binaryredneck.net/node/161) so he knows what not to do.
* His first programming language isn't the most important factor. The totality of programming languages he learns is extremely important. One-language coders never pass a certain (relatively low) level of coding-foo.
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.