
What is the First Programming Language You Would Teach Your Child - ddaavviidd
http://www.daddymodern.com/what-is-the-first-programming-language-you-would-teach-your-child/
======
roel_v
Can a parent with children at the age where they're capable of learning how to
program chime in on how realistic this is? I mean I know that prospective and
recent parents have grand dreams of how they'll spend weeks on end educating
their child on how to avoid all the traps in life they themselves have fallen
into (I'll be a dad in Feb, I know _I_ do - and so do my friends who are in
similar positions); daydreaming basically about teaching our children to
become _us_ as fast and efficiently as possible (where _us_ is a moving
target, of course).

The rational part of me thinks it's fruitless though - children at those ages
aren't interested in abstract things like this unless there is an innate
drive, and in that case you won't have to teach much at all anyway. Of all the
people I know who are very good at something and who have older children, none
of those children has an interest in their parent's area of expertise. And
let's face it, programming is a very small and deep niche; as much as we'd
like to tell ourselves that the world revolves around software, it doesn't,
even if it powers most of the tools and things we use every day. The chance
that our children will have the same interest in programming that we have is
very small, it seems to me.

~~~
jsvaughan
I've got a 2 year old and we muck about with <http://scratch.mit.edu/> every
so often (choose rockets on google images and make them take off to the moon,
have steam trains drive around, change directions and play recorded sounds
when you press the keys etc). The thing is I'm not doing it to show him how to
program, and I have no preference as to whether he ends up knowing how to
code, it is just something fun and creative to do; an alternative to
playdough, lego or painting and drawing.

~~~
roel_v
That looks cool, thanks, I'm going to bookmark that, here's to hoping that in
two years time I'll find it again ;)

------
samlittlewood
Lego

... and on a more serious note, work back from the sort of things he might
like to make, not the tool.

I have an 8 yr old - he gets on well with sketchup and lego digital designer.
I have shown him the sort of things that scratch and processing can do - he
hasn't explored them beyond some tinkering.

The most likely candidate is lego mindstorms - he loves building with Lego,
and I have already set him up with brick that does drive+steering. This hols,
I will sort out all the tools on the house machine, and see what he makes of
it.

~~~
kls
for a boy, scratch is a good choice:

<http://scratch.mit.edu/>

for a girl:

<http://www.alice.org/> and storytelling Alice.

My little girl is interested in Scratch but Alice just hit the nail on the
head when it comes to keeping a girl interested in the subject.

I am also going to second Mindstorm it starts them down the right path,
hardware and software. It is worth the money. Whatever you use, you want to
get to games fast, if you want to keep them interested.

It is hard to use a traditional language because you can't get the feedback of
a small game quickly. Now I know there are some great programmers that can,
but with the coding boat anchor that is a kid trust me, you be lucky to get to
a simple game even on the iPhone in a week. The only traditional tech that
comes close is Flash or a 3d game engine scripting language. Back when
Macromedia was around, Director was great for this, I know Adobe still sells
it, but I don't know if it is worth it anymore, not having touched it, in over
a decade.

------
rodp
The first thing you need to do is stop presuming your child will be interested
in whatever you are interested. My old man loved cars and certainly shared
that love with me but when he realized how much I love computers, he used up
his savings to buy me one and supported me in becoming a programmer, despite
the fact he knew nothing about computers himself. Parents have a lot of power
over their kids. Instead of abusing it and trying to "replicate" themselves,
they should use it to support their kids' own interests -- whatever those may
be.

That said, if your kid ever clearly expresses interest in learning a
programming language, I'd go with Ruby :)

------
Su-Shee
Smalltalk with Squeak.

It was invented with children in mind, it's a great programming language
anyway, it's easy to use, very smooth to program and comes with the full
package of GUI, debugger, class browser, younameit.

Children manage very fast and within two days, they're programming amazing
things with it.

Squeak's "Hello World" is a green turtle moving over the screen.

(It's also a very nice and smooth programming language for grown-ups too.. :)

Though I'd second the Arduino idea, too - great environment!

~~~
loewenskind
It's a shame this isn't a more common answer. As you say, Squeak was made for
this. Smalltalk is also one of the closer-to-English options out there.

------
Twisol
Why don't we ask the kids?

I've actually seen quite a few people asking what a good language to teach to
children would be. Unfortunately, I think the vast majority of us are
inexcusably biased. Therefore, I think someone should get together a group of
kids, put them all in the same room, and give them a selection of languages.
Let them play with whatever language(s) they pick, and see what happens.

To answer the original article, I think Javascript is a good language to start
with. My first 'language' was HTML, and the great thing about the browser
languages is that you can show your creations off really easily.

~~~
steveklabnik
The problem with the Javascript/HTML route is browser incompatibilities. Not
to mention trying to juggle two new syntaxes at once.

------
enjo
Lego mindstorms has a beautiful visual programming tool in which you combine
little blocks to build programs. Has flow control and all sorts of things
going on, with the added bonus that everything is very tactile... you input
the commands, click a button, and your contraption starts doing things.

It's what I would start my kids on.

------
yason
Programming today is such an abstract craft that appears very complex to non-
programmers and that is against anything a person needs to have in order to
learn new stuff. It's like trying to teach a kid to ride a bike by showing him
pictures symbolizing the physics of balance and pedalling and steering. No,
you need something very concrete and hands-on. That's why kids learn to ride a
bike _on the bike_ and not in a simulator.

With regard to programming, we've gone backwards a lot. What I would do is put
up an 80's personal computer with built-in BASIC into an emulator. (Or find a
similar environment for modern computers: I don't know any but would be
interested to hear about it.)

Nothing beats the joy of enlightenment when you POKE your first ball-shaped
character on the screen, or write a FOR loop to move it around a bit, or POKE
some values into foreground and background colors. And you realize that all
the machine has is a list of numbered slots (memory addresses) that (almost)
all can have values read from and written to them, and those values change the
way the computer works.

Note that you can still write a byte to the framebuffer on modern computers to
light a pixel, but it's much more easier to try things out on a 40x25 grid
rather than on a 1600x1200x24bit array of RGB values.

A computer is really a very simple machine and if you don't tell your kid that
most normal people think programming is scary, he won't know that. I've read
of stories where woman office workers were in fact programming in the 60's and
70's, they just didn't realize that.

------
vtail
I'm a bit surprised that Scheme-based languages, especially Logo and Racket,
are not mentioned.

See also:
[http://en.wikipedia.org/wiki/Educational_programming_languag...](http://en.wikipedia.org/wiki/Educational_programming_language)

~~~
rednum
I remember when I was child in nineties and my father showed me logo. I didn't
find it much interesting but it gave me some idea what programming is about
[1]. Then in my teens I started learning C++ - and it was a real struggle.
Only in the beginning of 2010 I discovered lisp language family (including
racket) and I instantly loved its purity [2]. I wish I could start with it, it
would save me much time and frustration. In fact I think I'm going to teach
some basic racket to my 10 year-old cousin.

[1] Well, I was 7 years old that time so it was basically something like
realizing concept of programming language as a way of communicating with
computer

[2] Well, I'm no a lisp expert but they seem pure comparing to C/C++/Java when
you write some beginner level programs - no cryptic things like type
declarations or pointers

------
Locke1689
I taught myself Python at 9, C++ at 11, and Scheme at 13. The only languages
on the list I've never used are Prolog and OCaml.

Go with Python. Unlike almost everything else you mentioned it's actually
useful even if they don't like programming.

------
ulf
I would start off with Logo.

<http://logo.twentygototen.org/>

While it is very simplistic, it is also super-easy to get started and create
something visible on the screen (which I suppose is important for a child not
to lose interest). You can convey a lot of very basic yet important concepts,
and immediatelly visualize them (Iteration: draw an n-polygon or growing
objects, Recursion: Snowflake like fractals, and so on). If your child catches
on, you then can ease in into something more sophisticated.

~~~
ZeroGravitas
Cool link. I've been meaning to work through Abelson's Turtle Geometry book
and that might give me a push to do it.

I wonder what the easiest way to get a logo turtle with dry eraser pens for
use on some whiteboard sheets is? Lego Mindstorms maybe?

------
arethuza
My 11 year old son has played a bit with Scratch and Mindstorms - but never
got that engaged.

However, what recently got his attention was scripting in Crysis - he was
playing it and accidentally opened the console window and he asked what that
was for and it gave me the opportunity to explain about scripting and APIs. As
he normally uses a console the openness of something like Crysis was a bit of
a pleasant surprise to him.

Not that I'm recommending Crysis as an educational tool - but I do think it is
important to find something that engages them.

------
rayvega
Although the author discounted Python, I'd still recommend it. Python has a
turtle graphics module that is based on Logo, a Lisp-based language that has
been traditionally used to teach kids programming (myself included):

<http://docs.python.org/library/turtle.html>

~~~
faz
Yeah, there are plenty of tutorials out there for teaching Python to kids. I
also remember seeing a book once, but can't remember the name.

I would like to see if currently anyone in the HN community has taught kids at
a young age (preferably below 8) to code in Python and how well they could
grasp it and implement it.

------
jemfinch
C, so I could see early on whether it'd be a productive venture.

~~~
wlievens
That's downright cruel.

~~~
jemfinch
It's not cruel, it's just reality: some people have a natural aptitude for
programming[1][2], while others don't.

C is a small enough language and has a simple enough programming model that it
would be clear early on whether my kid had the natural aptitude that would
justify focusing significant effort on learning programming as opposed to
other worthy endeavors such as music playing or 4H club or learning another
natural language.

[1] <http://www.ppig.org/papers/18th-dehnadi.pdf>

[2] <http://www.daimi.au.dk/~larsen/papers/mental_models.pdf>

------
thought_alarm
An ideal first programmng language would enable one to do really cool things
with their computer and would allow one to be endlessly creative.

Some examples from the 80s would be: AppleSoft BASIC, SmartLOGO, HyperCard,
and many others.

Some examples from the 90s would be: ???

Some modern examples would be: Shoes/Hackety-Hack.

~~~
limmeau
90s: QBASIC.

~~~
TheCoreh
Oh, QBASIC. That's also why I'm a programmer today. It was the first
programming language that I learned. I remember typing QBASIC on my MS-DOS
6.22 command prompt when I was still a child, and seeing that blue, text only
IDE light up.

------
gtjuggler
I'd probably start them out with C# .NET in Visual Studio, and this is coming
from a Mac guy.

This is solely based on the sense of joy and excitement I felt when I first
started working in .NET as it was my first experience with quality auto-
complete. Good times.

------
noblethrasher
Doug Crockford gave a neat answer to a similar question: if you teach them
assembly then they'll want to experiment with _everything_ (i.e. not just
stuff that lives inside a computer).

------
RK
It's clearly a matter of taste, but I think Python is very fun to program in.
You can just get stuff done.

For kids I would try <http://pythonturtle.org/>

------
demallien
I try to remember what it was like when I was a young child learning to
program, and if there is one thing that I remember, it was that I did it for
games. I was lucky enough to be 6 years old in 1980, when you could get BASIC
game listings in computer magazines - you'd type them in and hey! new game!

But before even starting to type in those games, my father had shown me a few
simple things that you could do in BASIC, with prints and inputs and some
simple loops/gotos/gosubs. That meant that I could understand the language
that I was typing in from the magazines.

More importantly still, I was using a somewhat orphan computer called a
Compucolor II. It didn't have the same graphics calls as those found in the
magazines for TRS 80/Apple ][ etc. So I had to learn to translate the graphics
calls to something that made sense for my computer - in general it was only a
small part of the program, so not too daunting, but it meant that I actually
had to think about what I was doing, not just typing code into the computer.

I played a bit with Logo at around the same time (my father was a CompSci
teacher), but it never engaged me the same way that those first BASIC games
did.

The other big influence that I remember from early childhood was a book that
contained a full text adventure called Haunted House (or something like that).
The book had lot of pretty pictures, but more importantly it explained how
each bit of code actually worked, how to store room descriptions, state flags,
objects in the inventory, how to write a simple parser etc.

Better yet, towards the end of the book, there were challenges - how could I
modify the game so that the player has to retrieve a key that was hidden in
the drawer of the desk in room 16? How can I modify the game so that the
player is eaten by a monster if they spend too many consecutive turns in room
27? And how can I give warning of the monster's approach so that they know to
leave? By the time I'd finished that book, I had a pretty good understanding
of what programming was about.

In the end, I think that all of the discussion about what langauge to use is
pointless. For what it's worth, I think that the keys are the ability to
create simple arcade games with less than 100 lines of code, plus some sort of
book/aide that a kid can go through at their own pace that explains how to
write a more complex game. Data strutures? Object oriented code? functional
programming? No, these are abstractions that are quite simply too hard for
most kids to grasp. I think arrays are about the limit that young children can
understand effectively. Get them started on thinking about how to break down
problems into simple parts that can be solved. Get them actually coding by
choosing a subject matter that interests them. The rest will come later quite
naturally.

~~~
pixdamix
I would say that C, an arduino, a bunch of resistors, LEDs, a VU-meter then
hack something fun out of that. Nothing could beat the feeling of programming
something you can wire and hold in your hand. Especially for children.

------
manish
Scheme, since it is so simple. Very easy to learn. No syntax, no comma, no
semi-colon. I would have been delighted to learn scheme as my first language
rather than c.

~~~
Waywocket
This. Scheme was the first language I was ever taught rather than clumsily
working out badly on my own, and it was a _joy_.

If you've not yet had your mind (irreparably ?) damaged by prolonged exposure
to imperative languages then programming in Scheme is a wonderful experience
in which everything is so simple, clear, and intuitive that it feels like
everything is not only possible, but easy.

The only other language I've ever actually enjoyed using is Lua, which would
also not be a bad choice.

------
eelco
<http://processing.org/> (or maybe <http://processingjs.org/>)

------
yread
Assembler because ontology follows phylogeny.

You can also easily see how stuff is done in programs you are running. And it
encourages delayed gratification

------
brisance
I'm going to stick my neck out and say RealBasic. Yes, the language is
proprietary and costs money, but it's really easy to get some code going, it
runs on multiple platforms, and you can make native API and DLL function calls
where the standard library doesn't meet your needs.

<http://www.realsoftwre.com/>

------
wglb
Sorry, I must have been reading HN too long and I misread the title as _What_
is the first programming Language You Would Teach Your Child.

But seriously, concentrate on reading to your child at first, then reading
with your child. Programming should come later in life, and only if that is
the child's interest.

( _What_ ain't no programming language I have heard of)

------
andre3k1
Other than some basic HTML, the first true programming language that I
mastered was that of my Texas Instruments "TI-83+" calculator.

I would make little programs in 7th and 8th grade that helped with the math
that we were learning at the time. I then proceeded to sell these programs to
friends and classmates. It was awesome.... until I got caught!

------
steveklabnik
With all of the mentions of turtle graphics, I'm glad that it was put into
Hackety over the summer... what do people use to do stuff with Logo nowadays?
Is it just a library used from another language, or is there some modern Logo
environment out there that I'm not aware of?

------
SimplePast
mmm ... I would begin with some logic and set theory. Then i think python +
turtle graphics are fine.

------
tzs
COBOL! I'm not entirely joking. There are important legacy systems using COBOL
that simply refuse to die--unlike the aging COBOL programmers who maintain
them. I bet there would be many organizations that would love to find a young
COBOL expert.

On a more serious note, Lua could be a good option. It is a clean, simple, but
powerful language, and it is used to script many games. I could see a kid
enjoying learning programming by writing Warcraft add-ons.

Javascript (the good parts) might be reasonable. A web browser then provides a
nice interactive environment the kid can program.

I wonder if a case could be made for something like Haskell? The idea there
would be that it is a powerful, concise language, but that many people have
trouble learning it after they have learned more conventional languages. So
why not start with Haskell, before the mind has been trained to not think in a
Haskell-compatible way? (Same argument could be made for several other
languages besides Haskell).

------
rasur
Scratch (and then on to Smalltalk)

------
limmeau
I picked up programming at 10 from watching my father (machine engineer with
no CS background whatsoever) write dBaseIII+ programs. So I guess any language
will do, as long as it doesn't require advanced maths.

------
topbanana
I'd probably try to find an old Commodore 64 on eBay

------
ygd
I'd have to disagree with him. Python is a blast.

------
Maro
I'd look for something on the iPad. In my experience, small children can't
resist the iPad.

------
veqon
At what age can a child begin to learn to program?

------
xentronium
Am I the only one who'd stick with pascal? :(

~~~
hiroprot
Pascal was one of my favorites growing up too, although not my first (Basic
and Logo got me started).

I learned most of my hard-core programming through demos (
<http://en.wikipedia.org/wiki/Demo_(computer_programming)> ), which I did in
Pascal first, and then added x86 Assembly.

Demo programming not only made programming accessible and fun, it also was the
first time that I actually got interested in Calculus outside of school
(matrix math for 3D animations, etc)

------
risotto
Basic.

TI-Basic on the TI-89, to be more specific.

And math at the same time.

------
kunjaan
JavaScript

