Tell me more ×
Programmers Stack Exchange is a question and answer site for professional programmers interested in conceptual questions about software development. It's 100% free, no registration required.

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!

share|improve this question
13  
Instead of books, buy a one year subscription to a hosting site. There's plenty for beginners on the web for free. Putting sites on your computer at home only has so much cool factor for a teenager. – JeffO Dec 6 '10 at 16:27
Haha, I run a number of VPS' that I've set him up with, so he should be good to go in that department! – vorbb Dec 6 '10 at 16:32

12 Answers

Register him an account for StackOverflow.com and Programmers.StackExchange.com

and get him into the habit of browsing different questions when he is bored. Start with the hot/most popular questions.

Also

Help him come up with a goal of something he wants to create that is slightly beyond his reach, a simple game, an app that can send a tweet? It has to be something that is exciting. This will help guide the topics he exposes himself to and provide him motivation through the tangible output he creates.

And

Where possible don't buy books in physical form if he works well with digital print, I am sure one of you has an android or iphone or blackberry or ipod touch? Get the ibooks or kindle app and buy digital versions.

Having to deal with a physical book slows the process of knowledge acquisition; the tools built into digital readers provide many benefits to technical reading.

Note: as mentioned in the comments, there are drawbacks to digital vs printed books, so take this point with a grain of salt

share|improve this answer
7  
I don't agree on the digital reading. Actually, I give the students the papers and make them read it. On a computer, they're far too soon distracted by all the other candy. Studying concepts is done best away from any digital device in my experience. Plus, reading on an mobile kills your eyes. What with schemes and figures? the only advantage is links, but that didn't help our students too much. – Joris Meys Dec 6 '10 at 21:02
1  
@Joris Meys, I concede that mobile reading is harder on the eyes, and 'being distracted by the other candy' would be a problem, but at the same time I am able to absorb information much quicker when I can easily look for the missing pieces... I can't even begin to estimate the number of tabs I spawn in my browser when researching something new. – instanceofTom Dec 7 '10 at 23:53

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 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 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 and, conversely, the particulars of a support leech 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.

share|improve this answer
Definitely agree there. I was well on to assembler by 14, definitely not too young for a bright kid. I had the RISC OS PRMs for my 14th birthday present. (computinghistory.org.uk/userdata/PRODPIC-12025.jpg - god I loved those books). But then I started at 7. – Orbling Dec 7 '10 at 1:49

I'd go with learning stuff for the mobile phone arena, that's prime real estate there. Get him set up with an IDE that has a phone emulator, and get him a phone he can push the apps to.

Set him up for some real world usage and hacking, supplemented with some theory from your books to guide him. Make sure they have good samples.

share|improve this answer
+1 for giving the hardware needed. That's going to be more of an issue than the information. – Joris Meys Dec 6 '10 at 21:14

I would go to school, if college age. I would take it high school, if high school age.

I'd have a mission and adjust the curriculum accordingly at 14.

many people will down me for this but Visual Basic .NET seems to be easier for some, just saying folks. It appears to be that way for many not in the initiate.

share|improve this answer
3  
If big brother can help or the local high school uses it, that may be more of a benefit. Now I think the .NET IDE is what makes building a website easier and not necessarily the language chosen. A beginner could pick up C# just as easily? Mandarin is a difficult language, but toddlers in China do OK. – JeffO Dec 6 '10 at 16:40

Starting with web dev is a nice idea. You can get results even if you're a true beginner, and if you mess up, it won't matter much.

I'd say Html/CSS + Php. As Jeff stated in his comment, having his site hosted will matter, and Php hosters aren't expensive, often even free.

As for theory, I would simply forget it for the moment. The way I understand it, he mostly wants to have fun, and let's face it, theory isn't very fun. Besides, if he does like programming, he will have plenty of it in school.

Obviously we all care about nice code, but if he's just going to play around, what does it matter if his code is messy?

share|improve this answer
+1 For mentioning the need for quick results for beginners and messing up not causing bother. – Orbling Dec 7 '10 at 1:45

web / desktop / mobile / server programming? Seems like to me, he is interested in everything. The problem is however, he's gotta start with something.

Many will disagree, as of course there is no "right" answer to this, but I'd buy him a book on Python (Learning Python is thick and thorough enough to keep him busy for a long time), and it is definitely a language which will give him a good ratio of stuff I learned vs. eye candy (i.e. what can be achieved with it). It is also a good starting point for many of the above.

After that, see what he favours the most of the above mentioned, and direct him further with advice in that direction.

share|improve this 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.

share|improve this answer

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.

share|improve this answer

My logical preference based on what I know now:

  1. Figuring out how things work now - While you state he is technically-inclined, how well does he understand how a computer works at this point? For example, does he understand differences between mark-up and scripts? What about writing little scripts to do this or that? This would be my suggestion for a starting point as demystifying what we have around us is a good starting point given all of stuff that could be explored pretty freely.

  2. Pick a language, IDE, and source control. Now while this may seem like quite a bit to hurl at someone, these are the rather basic tools that with a little practice he may well then move on to bigger things. Figuring out how to make a "Hello World!" web page that has the message embedded in JavaScript isn't a bad starting point if one wants something a bit more concrete here.

  3. Now start adding some of the harder stuff. How to do loops or conditions? This isn't really that fancy yet but we're still at the understanding the building block stage here. Lastly introduce the idea of classes and what are some ideas behind this concept.

Those would be where I'd start if someone wanted to get some basics of my skill-set.

share|improve this answer

I never thought I'd say this, but get him Alice 3.0.

I hate Alice with the burning fury of a thousand suns, but it definitely does do a good job of teaching the fundamentals of programming (loops, statements, functions, etc.) when coupled with a decent tutorial.

Once he's solid on the basics, move on to a more practical text-based language.

share|improve this answer

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.

This seems reasonable. Impart some basic skills and help him flesh out an idea for a challenging, project that he will remain interested in.

His first experiences don't need to be perfect, in fact it will help if he makes a ton of mistakes early. You just want to ensure that he remains interested in expanding his knowledge. When he hits his limitations, he will be begging for assistance and you can point him in the right direction if he hasn't already branched out to reference material.

share|improve this answer

Get him a book on Test Driven Development. It will make solid unit tests second nature to him. I wish I learded having tests as the core of my programming from square one.

share|improve this answer

Your Answer

 
discard

By posting your answer, you agree to the privacy policy and terms of service.

Not the answer you're looking for? Browse other questions tagged or ask your own question.