« Marathon Running Interview | Main | The Perils of Overtraining »

July 25, 2006 1:00 PM

Help Teaching Programming to a Teenager

I’m looking for ideas about different sources – online, books, and software – for helping a teenager learn how to program.  I’m looking for both introductory / early programming stuff as well as general computer science stuff.  The more interactive, the better.  If you have any ideas, please post your comments. 

Posted in: Programming

COMMENTS (17)

You might want to take a look at BlueJ

http://bluej.org/index.html

BlueJ is an integrated Java environment specifically designed for introductory teaching - great for learning general concepts in object-orientated programming, as well as solving the issues that some people have have teaching Java as a first language. And it's free...


Simon Brocklehurst , July 25, 2006 1:22 PM

Try 'The Little Lisper' for a short, delightful intro into big ideas of Computer Science.

http://www.ccs.neu.edu/home/matthias/BTLS/


Alan Kay's Squeak is another great learning enviroment.
http://www.squeak.org/

Raul P. Murguia , July 25, 2006 1:57 PM

You might try Kids Programming Language (KPL). It encourages "hacking by example" by providing a number of graphic games among the code samples. My 9-year-old was moderately entertained, since we replaced some of our own photos and sounds for the built in ones, without having to code up the boilerplate for the environment.

It's built on .NET, so you need Windows, but it's otherwise free.

http://www.kidsprogramminglanguage.com

Ho John Lee , July 25, 2006 2:58 PM

And for a little fun along with the learning, try Robot Wars: http://robocode.sourceforge.net/

Adam Kalsey , July 25, 2006 3:28 PM

From a friend:

I'm having my son (14yrs) Carlo go through Learn to Program, by Chris Pine. http://pragmaticprogrammer.com/titles/fr_ltp/index.html

He's enjoying it, but there's just so much more to do in the summer that he hasn't concentrated much on it for more than a month ;-)

If you haven't seen Ruby, it makes a great language to learn because it's small, interpreted, and dynamic. BUT, it can grow with you as you learn more. It's fully object oriented and therefore more consistent than something like Java where primitives and classes aren't completely interchangeable.

Brad Feld Author Profile Page, July 25, 2006 5:23 PM

Here is a talk about using Python to teach teenagers programming that you might find illuminating. I'm also including a link to an O'Reilly interview with the author of the talk. Good content.

http://www.python.org/workshops/2000-01/proceedings/papers/elkner/pyYHS.html
http://www.oreilly.com/pub/a/oreilly/frank/elkner_0300.html

Chad Harrington , July 25, 2006 5:35 PM

I have to agree with Adam's comment and start with something like Robot Wars -- http://robocode.sourceforge.net/

Along with learning some coding skills and having fun, you will get a good base in basic logic and skills that can be applied across many languages.

Christopher

Christopher , July 25, 2006 8:15 PM

You could try www.lynda.com It is a site full of e-learning for technology, which is based on quick time videos from very good presenters. Sample files included, and on a relatively low cost subscription.

Good luck.
Steve

Steve Podmore , July 26, 2006 4:47 AM

One of the most enjoyable books I have read recently is a programming introduction called Why's Poigniant Guide to Ruby on Rails. http://poignantguide.net/ruby/chapter-1.html
It is very funny and I think a creative/smart teenager could really enjoy it. Besides, Ruby is the hot language right now.

Adam , July 26, 2006 10:01 AM

I just spoke to my good friend Dan Scholnick, Founder & President of Flurry (http://flurry.com - creators of flurrymail).

He and I agree that books, CDs and the like are important *parts* of learning, but the key to really growing into computer science (or anything really) is finding a willing, patient mentor who will help guide you.

Dan first became interested in programming at age seven, when he picked up a book on Basic and taught himself (via the examples in the book) as much as he could. He says he quickly outgrew the book, and had questions but no one to ask (at seven your concept of 'who to talk to' is limited mostly to family).

As a result, he gave up programming in favor of other activities. He picked it back up at Dartmouth, where he was very active in the Basement, and helped create Blitzmail.

As prolific as Dan is now (he's attending HBS), imagine the difference a mentor might have made.

John Minniihan , July 26, 2006 11:08 AM

I suggest you look at RUR(PLE)(http://rur-ple.sf.net) which is a very gentle intro to Python.

Scheme is another possibility. Three excellent sources:

(text)
http://mitpress.mit.edu/sicp/full-text/book/book.html

(video)
http://swiss.csail.mit.edu/classes/6.001/abelson-sussman-lectures/
http://webcast.berkeley.edu/courses/archive.php?seriesid=1906978270

Martin

mac , July 26, 2006 5:36 PM

Brad, I think it depends on the kid's age, gender, previous computer background, and literacy. A few years ago, some friends asked me to teach Java to their gifted, 5th-grade son. He was already into Lego Mindstorms and other "kid" programming. He wanted to learn the "real" stuff. Because my daughter was his classmate, she agreed to join us. We were meeting in a location without Internet access, so we picked a book to use - Simply Java. It seemed ok since it was a hands-on, tutorial approach. What I found was:

- the tutorials were too rote and didn’t give the kids an understanding of why they were doing things
- there was too much reading in the book for the boy; he was a born-hacker and wanted to do, not read.
- the tutorials were too boring to interest my daughter. She decided that programming wasn't her thing (not what I wanted to achieve). The tutorial programs needed to be doing something that she thought was interesting or important.

Some of the other comments will probably give you better possibilities than what I did. However, your teenage friend is more than welcome to my copy of Simply Java.

Deb Miller , July 26, 2006 10:45 PM

Since Chris Pine's book was mentioned, it's worth noting there is an online version of the basic tutorial. It runs through some very basic concepts with code samples that show implementations of those concepts in Ruby (and starts with how to get Ruby running). Although this tutorial is an OK way to show someone what it will be like to "program" it doesn't do a lot, necessarily, to engage the creative juices. But, it's tough to teach "real" programming while giving projects that seem relevant, since there is so much to learn at the lower levels before you can really start to be creative -- I suppose that's the trick, though.

One way I have found to shorten the time from learning basics to getting creative is to start with the web. Learning a few basic HTML tricks and then introducing some javascript basics can be an easy way to introduce a lot of basic programming concepts but still get some instant gratification -- especially when the web pages created can be put up for all of the world to see. It's important, of course, to not just be teaching the HTML itself but focus on the javascript and what can be done with basic looping, conditionals, expressions, functions, etc.

This is such an important topic. My cousin's kid is 15 and desperately wants to learn how to program applications for his Macintosh, but few books start from "the beginning" and even fewer seem to come at things from a perspective that engages someone in the art of code conceptually before getting into the details. On the other hand, I suppose that it's good to learn right up-front that programming involves a lot of (at times frustrating) minutiae.

It's also good for someone interested in programming to get some higher-order perspectives. For instance:

http://www.norvig.com/21-days.html

Or, possibly event:

http://en.wikipedia.org/wiki/In_the_Beginning...was_the_Command_Line

I

Nathan Dintenfass , July 26, 2006 11:15 PM

The most important thing is to have a "real" project to work on. My first project as a kid was to keep a log of when someone entered or exited my room. I used a Apple IIe and a photo resister attached to the game port to detect movement in the room. Today you could do something really cool like that but instead snap a photo any time you hear a sound, for example.

The resources to learn how to do a specific thing are readily available to be googled at any time. The key is having motivation to do that particular thing beyond just "studying" it. Once you have the motivation to solve a specific problem and have a specific goal in mind, the answer to any problem or question is usually easy to find with examples in any programming language.

In summary, the best resource is a real project and a real mentor to point you in the right direction and provide needed hints.

I'd be happy to act as a mentor in this way via email or in person in Boulder. I don't think it takes much to help somebody in this situation, as long as they're self motivated. If not, they probably won't be a good programmer anyway. Feel free to pass along my email.

David Cohen , July 31, 2006 8:05 AM

Last spring, I volunteered to teach an introductory programming class at the small private school at which my three daughters attend and my wife teaches. I chose python for three reasons:
1. I know it very well
2. No compiling
3. Syntactically easier to deal with. Although issues such as indentation and case sensitivity are still bumps in the road for the kids.

It was a qualified success. Since it was a voluntary class, half of the kids bailed when they realized it actually meant work. The remainder stayed and by the end of the semester had become proficient in using Python up to object oriented concepts.

The text I ended up using is "Python Programming for the Absolute Beginner", Michael Dawson, ISBN 1-59863-112-8

This summer, I have employed my eldest daughter at $8/hr as a python programmer. She spent two weeks using the above mentioned text to get up to speed on python. She then used the reference "wxPython in Action", Noel Rappin and Robin Dunn, ISBN 1-932394-62-1, to get up to speed on gui programming using wxPython.

We use subversion for source code control and Bugzilla for the enhancement/bug manager. I assign her a bug/enhancement request, she checks out the latest from subversion, does the work, tests it, and then checks it back in for review.

She will be off to university in three weeks to start her studies in Biology and I'll miss having her in the office. She has made a slight change in her major, she has elected to pursue the Computational Biology specialty.

My middle daughter (15) is more interested in Java. The high schools have a computer science competetion in Java. The aforementioned BlueJ has proven to be a good tool. I let her pick out the text to use. She really likes it and has made good progress but I do not have the citation at hand.

My youngest daughter (12) is working through the above-mentioned python book. Since it teaches python by building games, she stays interested. It also helps that I'm paying her $10/chapter.

Charles McCreary , July 31, 2006 10:47 AM

phrogram.com. nuff said? :)

Jon Schwartz , August 19, 2006 6:23 PM

when I turned 12 ,over the summer I went to a camp called cybercamps at Stamford University and took a course on javascricpt and html. Cybercamps are based all over the states and it goes from ages 8 to 18. It helped me understand alot about programming and I strongly recomend it.

Tom Varsavsky , September 3, 2006 3:52 PM

Thanks for signing in, . Now you can comment. (sign out)

(If you haven't left a comment here before, you may need to be approved by the site owner before your comment will appear. Until then, it won't appear on the entry. Thanks for waiting.)


Remember me?