Ask HN: Programming resources for a 9th grader?

7 points by joelhooks ↗ HN
I was chatting with one of the moms at my son's baseball game and she asked my advice for her 9th grade cousin. The kid is stuck for a semester learning FORTRAN from a wizened teacher that believes it is an absolute essential component of child's introduction to computer science.

This is how you make kids hate programming. No?

I am assembling a list of resources to forward to this kid, and wanted to get your input.

Where do you think he should start digging, and what should he do after that?

9 comments

[ 2.9 ms ] story [ 32.3 ms ] thread
fire guy. buy arduino uno. download arduino IDE. file>open>examples
I think there are other decent choices, but I'm liking Small Basic (from msft) for my home-schooled children: http://smallbasic.com/

There's also Scratch from MIT, but the IDE doesn't feel as polished: http://scratch.mit.edu/

Edit: One of the nice things about Small Basic is that they are also putting together some teacher curriculum and lesson plans. Very helpful, especially for home schoolers: http://www.teachingkidsprogramming.com/ http://computerscienceforkids.com/MicrosoftSmallBasicTutoria...

No affiliation with any of these companies or sites.

I also came here to mention Scratch. I haven't used it but it looks promising.
I think that most critical for new programmers is a nearly-immediate feedback (reward) loop. You should teach them something that will let them do something they think is cool almost immediately and something that has enough utility that it can be deployed for real. As the programmer and a few others (family members, teachers, classmates) use that thing, the programmer will see the need for new things, make tweaks, and learn a lot about the environment in which he works.

HTML might be good in this regard. Everyone hold your horses -- I know HTML is not a real programming language (no variables, conditions, control structures, etc.), but HTML is easy enough to understand and can teach an individual about the rewards that lie in programming, and HTML is a vital skill for most prospective programmers -- let's face it that most people who want to be programmers are not fantasizing about a job in the basement of an insurance company writing business logic, but creating exposed, useful, and beautiful software for others to use and enjoy. In many modern cases this falls back to websites.

You'll be teaching the kid some of the basic principles (a bit of perspiration and study = pride and rewards) that keep programmers going. As you continue to nourish this principle with progressively advanced topics, ensuring that you are almost always making something at least vaguely useful, the new programmer will develop a passion for experimentation and learning that is absolutely required to be a decent programmer. From here, he'll probably take care of himself and use you only as a reference material when necessary.

On your first paragraph, I agree completely. As a relatively new programmer this was what made me adore Python.

On your second paragraph, I disagree. HTML doesn't have the immediate feedback of "I can write something that makes my life better" in the same way that, for example, Python does. Python lets you write something you can use for your benefit six months in. Something that will actually save you significant amounts of time in some cases. There is a power and a promise there that I don't see being matched in HTML. HTML is made firstly for others to view on browsers, while the first Python script you write can be done just to make your life easier. "Scratch your own itch."

For your third paragraph, I am again in complete agreement as a relatively new(2nd year in high school) programmer.

Kodu from Microsoft research is fun. You make a game. Scratch from MIT is cool as well. Can do lots of things with it. Alice (alice.org) I'm just downloading this one now. HTML and javascipt :) Lego Mindstorm A friend of mind is teaching his kid Python. (4th grader)
I highly recommend 'Invent Your Own Computer Games with Python' http://inventwithpython.com and How to Think Like a Computer Scientist http://www.greenteapress.com/thinkpython/thinkCSpy/ Both are great books that walk you through the basics up, without talking down to you.

I assume that the kid is on Windows. Using a UNIX-like system (Linux, BSD) is definitely a good way to understand computers better, especially because of the large amount of programming libraries available often by simply running one command. It's not required of course, but it might help him/her. Yet again, it might not. :-)

Once they've learned the dynamics of Python (or other) setting up a GitHub account might not be a bad idea.

Give them Design Patterns and hook them up to a car battery that shocks them if they try to fall asleep.