

Ask HN: Programming and Shaping Minds? - donniefitz2

Forgive me if this topic has been covered before. I have a friend with a young kid (age 8) who has  a fascination with computers (daddy uses OS X, mommy uses Windows).<p>Because I'm a friend and developer, this young kid's mom has asked me if I could recommend some programming curriculum for her child. I haven't really thought about this much but it seems like a great opportunity to get a hacker started at a good young age.<p>I was hopping some fellow HN fans could recommend a curriculum or just a path for this young kid to begin with.<p>So where would you start if this was your own kid, who has a predilection for computers (nothing forced here, the kid genuinely wants to learn)?
======
dsil
Check out LEGO Mindstorms, it's basically LEGO with motors that you program. I
think something physical attached to the (abstract) programs would be a great
way to start.

It's recommended for ages 10+, but I'm sure a bright kid with an adult helping
would love it.

~~~
grinich
Check out Not Quite C (NQC). It lets you write actual code to run on the
Mindstorms platform. (This was my first experience coding.)
<http://bricxcc.sourceforge.net/nqc/>

~~~
nazgulnarsil
agreed. NQC is better than the various forms of BASIC that I and many of my
friends learned calculator and basic robotics programming on.

------
lcordier
First thing, don't underestimate kids' ability to learn new things, it is
important to keep them challenged.

I would recommend,

<http://www.greenteapress.com/thinkpython/thinkpython.pdf>

Python got the turtle, so no need for logo.

Videos makes things easy.

<http://showmedo.com/videos/python>

Games are also a great motivator.

<http://www.pygame.org/>

When (s)he gets more advanched, older (think: upgrade path) I would recommend
things like,

<http://www.sagemath.org/>

<http://www.scipy.org/>

<http://www.diveintopython.org/>

------
dca
I've had good luck with Scratch from MIT in teaching my children.
<http://scratch.mit.edu/>

They seem to pick up on the basic math concepts pretty quick (i.e. to move the
character up, I need to add something to this X variable...).

Its a lot like Squeak (I think a derivative), in that they can paint the
objects they're going to animate and then visually construct programs to
control them and implement their logic.

------
3dFlatLander
Eight seems a little young, I think most start in their early teenage years.
My own experience was to start with HTML and Javascript, and from there I
moved on to Perl, C and the like.

I think HTML, Javascript, and CSS make a great starting point. Web pages are
something you can show off to your friends--I got a lot of satisfaction from
showing off what I had made when I first started out,

There's tons of books and resources to learn it. More importantly it's easy.
You can't get HTML stuck in a loop, but it will still provide many
opportunities for the kid to learn that computers will do what he says, not
what he means. And all he needs is a text editor and a browser.

~~~
alanthonyc
I completely disagree. I started programming in BASIC when I was eight. From
the first lesson on, I was always after my parents to give me more - a
computer, programming books, etc. If the kid is truly into it, all you will
have to do is get him started with a real programming language. His natural
desire will (hopefully) take over from there. Baby steps, by starting out with
a markup language may also work, but it won't necessarily be better.

------
stan_rogers
If money isn't particularly tight, or if the family already has a licensed
copy, Flash and ActionScript make a particularly good start. Like Logo, the
kid can make things happen nearly immediately, but since ActionScript has a
syntax that is similar to "real" languages in common use, the habits gained
are more directly transferable to other projects later on. I'll refer you to
Ned Batchelder's site for a better argument:

[http://nedbatchelder.com/blog/200711/best_computer_language_...](http://nedbatchelder.com/blog/200711/best_computer_language_for_a_beginner.html)

------
lkozma
Logo and Turtle-graphics might still be the best way to get started:

<http://en.wikipedia.org/wiki/Logo_(programming_language)>

The advantage is that the kid can see immediate visual effect of the code, it
is easy to understand and it can introduce more advanced concepts (functions),
also it might direct curiosity towards robotics.

It is very simple and intuitive and there must be some open source version for
every platform.

------
J_McQuade
I'm going to go against the grain a bit here and recommend that the parents
try to pick up an old 8-bit micro for the kid.

When I was a young'un, I also had a major fascination with computers (guess it
didn't wear off...) and managed to badger my mum into getting me a ZX Spectrum
128 from a car boot sale in the run up to a birthday (perhaps my 10th?). This
was already old technology, then - we had a Windows 95 machine at home - but I
didn't care. It was _MY_ computer and, with the help of a few yellowed books
and the first two volumes of INPUT magazine, I could make it do what I wanted!

I think that this was a very powerful introduction to programming - a good few
years of PEEKing and POKEing and dipping into assembly every now and again is
perhaps the most natural way to develop intuitive ideas as to how computers
work and, although BASIC is frowned upon, it's always good to find out _why_
the hard way! A lot of these ideas sound scary now, but on a small machine a
kid can really go wild with them, and that freedom can be the best learning
tool of them all.

And another plus with this plan - the kid gets a cool new gizmo. ;)

------
noss
At that age I had started programming BASIC on my C64 a year earlier, copying
the examples from a book targeted at adults and written in a language I did
not know (english). [Only slightly bragging, but here is what i want to say:]

The teaching material does not have to be all that pedagogical, but the
motivation make the computer do something needs to be there.

In this day and age, I think that the absolutely best environment is to make
dynamic web pages. By just outputting a few rows of text you can see a result
page and imagine having it online for friends to use. One can also create
dynamic pictures.

I used my knowledge of BASIC around that time to write training programs in
multiplication, addition, and when English classes started, word translations.
That is, I made semi-realistic solutions to problems I had, and the resulting
program was used by me (and also friends once you could compete in score
points).

------
nostrademons
Boy or girl? I think the assumption is going to be "boy" unless you specify
otherwise, but I'd recommend different things for different sexes...

For boys, I'd probably start with games. Maybe Python and PyGame? I've heard
pretty good things about it. JavaScript makes a good first language as well,
since all you need is a web browser to make it run.

For girls, I'd do something webby with a social component. If you could write
a server, maybe set up some sort of framework where she and all her friends
could send things to each other, sorta like real-time Pownce? Actually, now
that I mention it, I kinda wanna try implementing this, since it could be
kinda cool.

For both sexes, maybe take a look at Alice from Carnegie Mellon?
<http://www.alice.org/>

~~~
donniefitz2
For clarification: the kid is a boy. I would like for him to learn from the
bottom-up (start at the beginning and work up from there). I will play a big
role in his learning (scary, but I am a developer so I feel sort of
qualified).

~~~
phugoid
I think enthusiasm is more important than structure and curriculum both for 8
and 80 year-olds. Just plant the seed - if he takes an interest, he'll start
learning on his own. When he comes up with interesting questions, you can
start filling in the background he lacks.

That's what I plan to do with my kid. He's 2 years old, a little young for
Python. But I have an OLPC, and I sit down with him while he pokes away at it.
When the time comes, I will try not to be pushy or academic about it.

------
jey
A nice simple language like Python would be best, and no, 8 is not too young,
especially if the kid shows interest. The kid should be given lots of sample
code, and encouraged to modify/extend it. I think there's plenty of substance
in text-based programming to hold his/her interest, but one of the robot
programming toolkits could be used to help keep the kid motivated.

------
jokermatt999
I'd recommend Invent Your Own Computer Games with Python
(<http://pythonbook.coffeeghost.net/book1/index.html>). It's free online, and
it geared towards exactly that kind of age and setting. It's written for a
beginner at programming, and most kids would probably love writing their own
games.

------
izak30
Microsoft put out Small Basic a little while ago. It's actually a lot of fun,
and really simple (well... for me... the kid would be the real test) to pick
up.

I did a quick overview here
[http://www.issackelly.com/Blog/entry/Hands_on_with_Small_Bas...](http://www.issackelly.com/Blog/entry/Hands_on_with_Small_Basic/)

------
amichail
Try Game Maker: <http://www.yoyogames.com/gamemaker>

------
travisjeffery
I think the kid need would know a bit more math first (than a typical 8 year
old would) and then move to something like <http://pine.fm/LearnToProgram/>

------
donniefitz2
These are all great suggestions and I'm seriously looking each of them over.
Thanks to the HN community.

------
alexgartrell
javascript. Everyone has a text editor and browser. Plus young kids can use it
to screw around in school.

