I have been asked to teach a high schooler how to program. His math skills include Algebra II and Geometry as well as an understanding of computers.

My programming experience lies primarily within C# and Java, with a fairly decent understanding of most database technologies.

Given I do not do any game programming what should I teach him?

One additional note, I am not living in the same state as the potential student so this will be a purely virtual lesson.

Update: He does in fact want to learn, not simply being forced.

Update 2: In the spirit of chosing a non-technology specific answer I went with the top rated response. I am definently investigating his interests now and the links that have been suggested.

Thanks for all the responses, I wish I could choose more that one "accepted answer"!

+4  A: 

Surely bright schoolboys should be teaching themselves to program?

Will Dean
That's what I did when I was there. Though it would have been nice to have not fallen into so many holes. The way I see it, that is what his job is here.
Robert Massaioli

Does he want to learn or is he being forced?

I would try to first concentrate on concepts, like looping, conditionals, etc. The some simple problem solving. Prime numbers less than x.

Python is a language designed from a background of teaching programming.

+10  A: 

I agree with Will Dean that self-teaching is the best way for a bright teen to learn how to write software. You should be more of a guide than a teacher. Just let the kid ask you questions, and give honest criticism of his work.

Kristopher Johnson

i would point him in the direction of a good online tutorial for a simple language. the first i learned was python as it is easy to pick up and easy to grasp the concepts of.

or even if you know java, have him start with a tutorial and then answer any questions he has. remind him that in the real world, google is his friend.

+1  A: 

I think the best start is to begin with a scripting language and even better a language which allows for some instant gratification. Apple script or shell scripting is a good place to start because you can instantly see how your programme is interacting with the OS. There is also a good ruby tutorial

which might be helpful.


I have not personally used it, but Carnegie Mellon University has a purportedly easy-to-use game development system called Alice. It is targeted at teaching middle-school girls programming. CMU also has a more in-depth game engine called Panda3D, which is also free. I believe most Panda3D development is done in Python, though there may be other bindings. You can make some pretty sophisticated 3D games with Panda3D. The original code base of Panda3D became the game engine for ToonTown Disney.

Brian Stewart
+3  A: 


Given your experience with C# and Java, I would suggest this great resource: Kid’s Corner on MSDN

It has the following topics:

  • C# for Sharp Kids - An ebook on programming with C#
  • VB For Very Bright Kids - An ebook for learning how to programming with Visual Basic
  • Code Rules - A curriculum for learning how to program using Visual Basic. This package includes Teacher materials, Student lessons and quizzes and has been used in schools around the country.
  • CurliQue Studios - A curriculum for learning to build a dynamic web site for a rock band. This one also includes teacher materials. My friend Dave Jacobus blogs about using it with his class and seems to like it.
  • Creating your First Website using HTML - Follow along with this Microsoft DigiGirlz Tech Camp presentation to learn how to use HTML to create your own website!
  • A list of other kid friendly websites and learning resources.

Hope this help.


+1  A: 

Search the student's interests for a hook such as baseball, word games or movies. The rest should take care of it's self if there is a genuine interest. On the language side try using a dynamic language such as python, they are pick up friendly.


  • solve a simple soduku.
  • calculate favorite some baseball stats.
  • make a little movie database
+1  A: 

Ask the high school student what he/she (because it could be a girl!) wants to learn.

When I was in high school, the coolest thing I could think of was making Windows GUIs. If the high schooler has similar desires, teach them C#. They'll be able to make quick GUIs in C# and you'll get to teach them solid programming concepts.

Maybe they're more into seeing how the system works or into digital design. You could show them C or assembly language, and teach them the low levels of computers.

The point is, there are many good answers and many solid languages for learning to program. I think teaching the student something that they'll be most interested in is your best bet.

Ryan Guest

When I was in highschool I made a CD catalogue (this was pre mp3 days) which was a pretty interesting way to learn about relational databases as well as object oriented programming.

I also made a "tipping comp" program which allowed people to login, enter their tips for the games that weekend and then track their progress.

Both of those apps were pretty easy to make but also cool because I could actually use them later on.


I got my start in coding by following the demoscene. I saw what other coders have done in their demos and wanted to emulate to show I could do the same programming feat of realtime graphic and music manipulation with emphasis on code speed and size optimization. This gave me a headfirst introduction to assembly and C and direct hardware access (in the DOS days, anyway). As I got more involved with business requirements at my job, I've dug more into the relevant professional development matters. Either way, what worked for me was to find something I could either emulate or improve upon and make it happen.

FYI, There's a DVD called MindCandy that documented the demoscene movement. I posted the trailer on YouTube, which gives you an idea of what I'm talking about. Or, check out demoscene.tv for flash video captures of about everything demoscene.


If they really want to learn the best way to teach them is just to guide them. After getting the most basic stuff out of the way you should help them find a project that they are both interested in and is doable. This is how I helped my friend learn code. He had a plan for a small project, and I helped him think it through when he got stuck. And after that I went and showed him a much better way to write the code :)

If they choose the project it will keep them much more excited and willing to grind away. It is your job to make sure they can do it without so much frustration that it turns them off from the whole thing.

Brian Paden

Best ways to teach a beginner to program - This SO topic has some stuff that may be of help to you, lots of good links and lots of good advice.