views:

2721

answers:

26

I might be asking this question a bit early, since my kid isn't even born yet, but I want to be prepared. How should I start introducing basic programming concepts to my kid?

I remember typing BASIC code into my Commodore 64 and trying to get that little turtle to move around the screen at school. But what are some more current beginner-friendly environments with similarly encouraging cycles of quick work then results? I'm also looking for non-computer ways of introducing concepts like variables, looping, and fun stuff like recursion.

Incidentally, you can vote for my kid's name - just follow this link to my blog. My wife and I were having a hard time narrowing down names so we figured we'd just let the internet do it for us.

Thanks.

+4  A: 

This won't apply to you for a while but I've heard good things about Alice.

Randy Pausch described Alice as "tricking kids into learning programming."

Paolo Bergantino
Even my seven year old daughter loves Alice.
uncle brad
+7  A: 

Just make it available if they want to pick it up for themselves. Don't push it on them, and be open if they want to go in a different direction.

Terhorst
+6  A: 

I wonder if you've seen MIT's Scratch:

http://scratch.mit.edu/about

cruizer
+1  A: 

You could try Squeak, which is an interactve smalltalk environment (Smalltalk was originally developed by a research project about teaching kids computing). Etoys is an interactive logo-ish system written in Smalltalk that allows program structures such as loops and conditionals to be built using a drag-and-drop user interface.

ConcernedOfTunbridgeWells
+30  A: 

Almost every programmer I know had lots of Lego when they were kids. There is a lot more to it than just sticking blocks together.

Liam
Never thought of that..
dylanfm
Interesting answer... I had "lots of Lego", too.
Ree
Good observation.. I had legos too. And some other programmers i know, also have.
Fábio Antunes
Legos never threw exceptions!
DaveDev
+1  A: 

I'm not a "hippie" that believes everything would be better in Lisp, but I think the DrScheme environment included in PLT Scheme is good for learning computer science fundamentals. The extremely simple and consistent syntax -- everything is (func arg arg ...) -- means you can spend more time on concepts. It was designed for teaching, and if you dig around there are lesson plans available somewhere online.

benzado
I had a lot of fun with scheme in college but I would worry about exposing kids to that many nested parenthesis, they might suffocate ;)
Jason Morrison
+8  A: 

I think that wooden blocks or Legos would be a good place to start. Let them be creative and imagine things. It might actually give you inspiration for projects you can work on as well :)

I believe that playing with blocks and programming have some things in common. For one, it gives them a certain constraint -- for blocks, that may be gravity and block shape which will allow certain structures to be built, while others can't be. (Such as trying to fit a square block into a circular hole.) With programming, the constraints are the language, type-checking, syntax, etc. Also, modern day APIs can also be thought as "blocks" to build complete applications.

A creative thinker who knows how to build solutions from available methods would be good at programming as well, I think.

My apologies for such an abstract answer.

Edit: Another relevant question on Stack Overflow: Suggestions on starting a child programming

coobird
+1  A: 

A simple Python session is pretty much like the BASIC of ye olde days.

You should also look at some board games such as Robo Rally that introduce programmatic thinking in a fun way. Fun for you too! Then there are a bunch of games like Carcassone that rely on logical thinking that are also fun.

m_eiman
+6  A: 

start with a good game

Haoest
nearly got addicted!
Shahin
+1 just because I love lightbot.
GSto
+2  A: 

Maybe Robocode (java) or Terrarium (.net) like programming games catch their interest

spinodal
A: 

that vote is fun for friends & fam How bout Baby smash?

Catto
+1  A: 

Although not directly related, some of the tycoon series games can utilise similar paths as programming. IE: Transport Tycoon/Roller Coaster Tycoon, ( I kinda prefer the legacy ones with the basic graphics ). Then you learn multiple constraints and meeting the rigmarole of supply and demand that you cant exactly control and learn a little on the management side of things. ( Not managing projects per-se, but more managing your brains to handle the concurrency ).

Incidentally there's a great open source transport tycoon implementation OpenTTD. It requires the image librarys from the original still, but this one is cross-platform friendly and has implemented everything identically and added improvements across the board.

Kent Fredric
+1  A: 

I think language is the basic fundamental of programming... understanding closed Yes/No, True/False questions and answering them is the natural precursor to understanding boolean logic.

Daily life presents us with numerous sequences of events... and numerous occurrences of repetition, and things that can be done in parallel or no-particular-order...

I gather that in a couple of years you will experience the following repetition:

tellChildToDo(something)
While (answer != "yes")
    tellChildToDo(something)

I'm not so sure that lego blocks would help so much in programming - for the most part programming does not exist in the physical world.

Probably the nearest thing I did to programming in my youth was one of those '200-in-1' electronics kits where you wire up a load of different components in different configurations; I seem to recall that the one I had had NAND gates and so on so that was probably a useful introduction to seeing physical results from different wiring inputs; and the connections to computing are obvious... though for the most part, one just followed the instructions to get a result (which may not help in programming quite so much)!

Nij
I'm not sure I can agree that "programming does not exist in the physical world." I've always thought of programming as the solving of problems and figuring out systems.
keyofnight
+1  A: 

There's an article over on about.com that has some suggestions.

Also, this has been discussed before on Stack Overflow here, here, here, and here! (Tag search is your friend)

17 of 26
A: 

Logo, that is what it was designed for

ADDENDUM: for additional pre-language training, try one or more of the following -

  • flash cards/building blocks with only the numbers 1 and 0 on them
  • flash cards/building blocks with only combinations of the letters A-F and the digits 0-9
  • wire up a set of legos so that if they are snapped together incorrectly they explode

let me know how this goes, my wife wouldn't let me do this for our son. She also wouldn't let me name him "Steven A. Lowe v2.0" either ;-)

Steven A. Lowe
+1  A: 

I dont think we need to emphasise on the idea of 'Programming' to kids at very young age. Make them a good decision makers and problem solvers. Watch out how they solve real world problems. And correct if they lack some attitude, dedication and concentration.

Let them experience more games(Expecially startegy games) But dont let them being addicted to Games.

Let them play more outside than on Playstations

Give more important to Maths and Physics and if they are good in that no worry they will surely be a good programmer too.

After all programming is just another job like 100s out there then why just programming? :)

Jobi Joy
+2  A: 

I want to mention - if it turns out that your child would prefer to be a painter or a sports person or a writer or an actor than a computer geek - please don't be disappointed.

My mum wanted me to be a rugby international, but decided quite early on that it was an ambition I would never fulfil for her.

slim
A: 

Basic-256 is a language designed to teach kids programming and it even includes some graphic capabilities.

Tons0fun
+3  A: 

Start them off with Lego, and then Lego Mindstorms.

Lego Mindstorms NXT is a programmable robotics kit released by Lego in late July 2006.[1] It replaces the first-generation Lego Mindstorms kit, which was called the Robotics Invention System. The base kit ships in two versions: The Retail Version[2] and the Education Base Set.[3]. These can be used to compete in FIRST Lego League competitions.

The main component in the kit is a brick-shaped computer called the NXT brick. It can take input from up to four sensors and control up to three motors, via RJ12 cables, very similar to but incompatible with RJ11 phone cords. The brick has a 100x64 pixel monochrome LCD display and four buttons that can be used to navigate a user interface using hierarchical menus. It also has a speaker and can play sound files at sampling rates up to 8 kHz. Power is supplied by 6 AA (1.5 V each) batteries in the consumer version of the kit and by a Li-Ion rechargeable battery and charger in the educational version.

I think I'm going to buy one for myself. :)

jop
+1  A: 

I started programming young myself; and I can say that the biggest motivation for me was my social isolation. For some reason computers fascinated me and I wanted to find something that I could actually be good at and proud of myself for.

I think that the more you expose it to them the more bored they will get. I mean, don't push it. Let them want to learn about it - and after that, start teaching them. Of course, you should always encourage your children to be creative and think logically; in any context (not just programming); and perhaps it will follow that they want to learn more about making software.

Anyway, I wish you luck :)

nlaq
+1  A: 
John Nilsson
A: 

I started programming when I was 8 (3 years ago), after being on the computer every weekend (a treat) since I was 3 (apparently I could read when I was 2...). I needed a challenge, and my Dad kept saying he would teach me, but never got round to it. I started with Delphi and YaBasic for the PS2, then went down to VB.NET for a few months (urghhh), and now I'm having lots of fun in C#. I just think that starting with Scratch is a good idea (scratch.mit.edu), then a general-purpose language - YaBasic gets boring eventually. If he/she gets into it, then get them to try C. (Side note: a great intro to pointers is the Binky's Pointer Fun Video - stupid, but it sticks...)

+2  A: 

I think it has been mostly answered, so just a minor point. Don't teach them too abstract things - children have problems understanding that (depends on mental age, of course, but I believe that hardcore abstract thinking is not available until 14 or so). I would stay away from any OOP or data structures, and go for pretty pictures or robotics. Recursion is a so-so concept. Good introduction to it could be the L-system fractals, as they also make nice pictures.

+1  A: 

I am suprised no one has mentioned Simple Basic; I haven't evaluated any alternatives but I happened to download Microsoft Simple Basic and was quite impressed.

Really Simple(!) and up and running in minutes.

It's syntactically similar to vb.net but there are no controls, it's not even OO, it just simple imperative code with subroutines. It even has has goto for the spaghetti lovers. Read brief intro doc, they make a very simple paint program, a very simple game, a simple fractal image. And there is a Logo Turtle to play with. I think even quite a young child could get somewhere with this.

It can be found here Small Basic - http://msdn.microsoft.com/en-us/devlabs/cc950524.aspx

Christopher Edwards
+1  A: 

All programming starts with fundamentals that aren't even done on the computer: analysis of the situation, decomposition, reuse, and planning.

Starting a very young age, your child should build up as much empirical knowledge about the world -- an encyclopedia of common sense. Encourage him or her to ask questions and be prepared to answer them as best you can. Let them experiment with physical objects to learn how they interact. What floats? What sticks together? How much weight can you put on something before it breaks? What's soft? What's prickly? What happens when you mix yellow and red? Stay away from the virtual world of TV and the Internet and let them experience the physical world.

Once your child has gained some maturity and is ready to be creative (that is, to create new things), encourage him or her to make some predictions first. Will it fall down? Will it be loud? Will it be brown instead of blue? What happens if you use six widgets instead of eight? You'll be teaching you child about planning and thinking-before-doing.

When he or she is ready to tackle some larger projects (such as cleaning the messy bedroom or planning a picnic), show them how to break it down into smaller projects. Write down a to-do list.

Did something go wrong? Teach troubleshooting skills: retrace your steps; go over your checklist.

All of these real-world skills (and more) will come in handy once you're ready to teach some computer programming. Programming isn't about learning this or that language. No doubt, by the time he or she is ready, we won't be using the same languages we use now. Instead, programming is about critical thinking, analysis, and creativity, all of which have their roots in the real world.

Barry Brown
A: 

I don't think the Lego is directly relevant. Its if you like Lego you get lots and have some of the key quality's that help you in programming. E.G. Creative, The want to make something of your own, ETC.

abc