What is the First Programming Language You Would Teach Your Child
daddymodern.com
daddymodern.com
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.
That said, you can't force what your children are interested in. My father is a farmer, he couldn't really get me interested in doing that. So why would I expect that my kid would like programming?
That said, it's worth exposing them to see if they have that interest... but forcing it on them would end up poorly.
The funny part about logic, is once mastered, it transitions a person from learning resistance, to craving learning. One of the best ways to teach logic is via computing. I have seen the transition in my boy and it is great.
I don't expect him to be a developer and would be happy if he decided to go into something other that development but their is no denying, knowing logic buts him at a significant advantage over the majority of the population.
... 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.
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.
That said, if your kid ever clearly expresses interest in learning a programming language, I'd go with Ruby :)
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!
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.
It's what I would start my kids on.
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.
See also: http://en.wikipedia.org/wiki/Educational_programming_languag...
[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
Go with Python. Unlike almost everything else you mentioned it's actually useful even if they don't like programming.
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.
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?
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.
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.
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.
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.
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.
For kids I would try http://pythonturtle.org/
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.
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.
You can also easily see how stuff is done in programs you are running. And it encourages delayed gratification
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)
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!
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).
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)
TI-Basic on the TI-89, to be more specific.
And math at the same time.