views:

2697

answers:

44

What languages and tools do you consider a youngster starting out in programming should use in the modern era?

Lots of us started with proprietary Basics and they didn't do all of us long term harm :) but given the experiences you have had since then and your knowledge of the domain now are there better options?

There are related queries to this one such as "Best ways to teach a beginner to program?" and "One piece of advice" about starting adults programming both of which I submitted answers to but children might require a different tool.

Disclosure: it's bloody hard choosing a 'correct' answer to a question like this so who ever has the best score in a few days will get the 'best answer' mark from me based on the communities choice.

+5  A: 

I recently saw a presentation about GreenFoot (a java based learning environment for children). It looked awesome. If I would have kids, I would give it a try

Link to the presentation

It is a very playful environment, where you could start with very basic methods. The kids learn thinking in an object oriented way (you cannot instantiate an animal, but you can instantiate a cat). And the better they get, the more of Java you can uncover for/with them.

Mo
+1  A: 

I think Java might be a good choice simply because you can make GUIs easily, and see "cool things" happening. For the same reason, maybe any of the .NET languages. I've also heard good things about scripting languages (Ruby and Python, especially) for getting kids to learn how to program.

Thomas Owens
+6  A: 

Check out Phrogram (formerly KPL) and Alice

Geoff
+8  A: 

For a child, I would go with Alice. Any kid is going to like the drag-and-drop interaction that Alice uses better than trying to remember how to spell and punctuate any programming language. He/She will learn the basic programming structures (conditionals, loops, etc.) and will experience the fun of building an animated program they can show off to other family or friends.

A beginner CS class at the local community college actually uses Alice to teach programming in a language-independent way. It provides a good foundation for moving into programming in a particular language (or a few languages) down the road.

Justin Bennett
+3  A: 

How old? Lots of us stared with BASIC at some point, but before then, I learned the concepts of stringing commands together, variables, and looping with LOGO. Figuring out how to draw a circle with a triangle that can only go in a straight line and turn was my very first programming accomplishment.

Edit: This question & its answers make me feel old.

Greg Hurlman
+4  A: 

I'd recommend python, because it's so terse and expressive. Seems less likely to frustrate when getting started, but offers plenty of room to learn more advanced concepts as well.

AlexCuse
+2  A: 

Though _why hasn't given it much love in the past year or so, for a while I was really excited about Hackety Hack. I think the key for most new programmers, especially children who are more than apt to losing interest in things, is instantaneous feedback. That was the really wonderful thing about Hackety Hack: a few lines of code, and suddenly you have something in front of you that does something. There are a few similar applications aimed at things like drawing graphics (one of which, I briefly assisted Nathan Weizenbaum on, Scribble!). Kids simply need positive feedback that they're doing something correct on a regular basis, else there's nothing to keep them interested in the task at hand. What I think the future is for teaching children to program is some sort of DSL built on top of a language with friendly syntax (these would include, arguably, Ruby, Python, and Scheme) whose purpose is to provide an intuitive environment for constructing simple games (say, Tic-Tac Toe, or Hangman).

wfarr
+4  A: 

For a child, I would go with Alice.

Here is another vote for Alice. My 4 kids have had a ton of fun working with it and learning the basic concepts of programming. Of course to them it's all about socializing with fairies and ogres, but heck the darn legacy system I work on could use some faries and ogres too.

Dan Blair
This post made me chuckle :)
superjoe30
+2  A: 

I think you should start them off in C. The sooner they can get the hang of pointers the better.

See Understanding Pointers and Should I learn C.

David
+13  A: 

I'll second Geoff's suggestions of Phrogram (used to be KPL), and Alice.

My only other suggestion is Lego Mindstorms NXT. The NXT's programming language is drag-and-drop, is very easy to use, and can do some very complicated tasks once you learn it. Also young boys usually like seeing things move. :)

I've used Alice and NXTs with some young kids, and they've taken to it very well.

Eric Haskins
+3  A: 

I think python is a good alternative; it is a very powerful language also you can easily do a lot of things (not boring at all).

jl23x
+2  A: 

Checkout Squeak developed by Alan Kay who think programming should be taught at early ages.

epatel
+1  A: 

Well, if they're young and haven't learnt their ABC's you could try them on BF - non of those pesky letters and numbers to deal with.

I'll get me' coat.

Skizz

Skizz
care to explain what is the BF?
Axarydax
It's a programming language that uses the eight symbols "[]+-><,." - no letters or numbers. OK, it's name isn't particularly child friendly - keep it as BF.
Skizz
+38  A: 

I would suggest LEGO Mindstorm, it provides an intuitive drag and drop interface for programming and because it comes with hardware it provides something tangible for a child to grasp. Also, because it is "LEGO" they might think of it as more of a game then a programming exercise.

ejack
+1: This how I started when I was 10.
Callum Rogers
+1  A: 

I would go with what I wish I had known first: a simple MS-DOS box and the integrated assembler (debug). It is great to really learn and understand the basics of talking to a computer.

If that does not scare away a child, then I would go the "next level up" and introduce C. This shouldn't be hard given that the basic concept of pointers, registers and instructions in general are well-understood by then.

However, I am not entirely sure, where to go next. Take the big jump to Lisp, Haskell or similarly abstracted languages or should there be some simple object oriented languages (maybe even C++) be thrown in or would that more hurt than help?

HS
+2  A: 

I think the first question is: what sort of program would it be interesting to create? One of the things that got me started with programming as a kid (in BBC basic and then QBasic) was the ease of writing graphical programs. I could write a couple of lines of code and see my program draw a line on the screen straight away.

The closest I've seen to that sort of simplicity recently are the pygame library for python and Processing, a set of java libraries with an IDE.

I imagine that hacking on web pages would be another good way to get started: that would entail HTML, Javascript (using a library like jQuery), perhaps PHP or something along those lines.

Whatever tools you provide, the crucial thing is for it to be easy to get started straight away. If you have to write twenty lines of correct code and figure out how to invoke the compiler before you see any tangible results, progress is going to be slow.

Ned
+8  A: 

Two possibilities are:

Scratch - developed at MIT - http://scratch.mit.edu/

and

EToys from the One Laptop per Child fame - http://wiki.laptop.org/go/Squeak

cpuguru
Just to add that we now have two whole year groups using Scratch and it's working out really well - they're getting the hang of loops, subroutines, the full works.
David Hicks
+6  A: 

I'd say: give the kid a real C64, because that's how I got started. But, today... I'd say Ruby, but Ruby is a bit too chaotic. BASIC would be better in the long run. Processing is easy to learn, and it's basically Java.

The reason I recommend a C64 is because it's BASIC, but you still have to learn certain computer-related things, like the memory model, pixels, characters, character maps, newlines, etc. etc, if you want to do more advanced stuff. Also, if your kid finds it boring, you know his heart really isn't into coding.

Kronikarz
There's at least one school in the UK that's done this - gone and got a bunch of C64s from a carboot sale and used them for programming classes. The trusty old BBC micros are still in use in several places, too.
David Hicks
A: 

Wasn't Smalltalk designed for such a purpose? I think Ruby would be a good choice, as a descendant of Smalltalk.

wvdschel
+2  A: 

There are many good suggestions here already. I really agree with Kronikarz. Get a retro computer (or emulator) that you are interested in and teach with that. Why a retro computer? Basic is built in. Making sounds and primitive graphics is a trivial task. The real deal might be better than an emulator because it will be a bit more fascinating to a child who is used to seeing only modern devices.

Daniel Auger
+4  A: 

Game Maker might be another approach. You can start simple with easy drag and drop development, and then introduce more advanced programming as you go. The book The Game Maker's Apprentice: Game Development for Beginners has a number of sample games and takes you through the steps required to make them.

James Sutherland
+6  A: 

I would pitch LOGO. It was something that was taught in my elementary school. It gives nearly immediate feedback, and will teach really basic programming concepts. Moving that little turtle around can be a lot of fun.

Nate Smith
+1  A: 

Looking at Alice, I see it is "designed for high school and college students". There appears to be another language/version called Story Telling Alice that is "designed for middle-school students"

Alice Download Page

Keith Sirmons
+19  A: 

My day job is in a school, and over the past few years I've seen or taught (or attempted to teach) various children, in various numbers, programming lessons.

Children are all different - some are quick learners, some aren't. In particular, some have better literacy skills than others, and that definitely makes a difference to the speed at which they'll pick up programming. I bet that most of us here, as professional computer programmers and the kind of people who read and post to forums for fun, learnt to read at a pretty young age. For those kinds of children, and if it's your own child who you can teach one-on-one, you could do worse than JavaScript - it has the advantage that you can do real stuff with it right away, and the edit-test cycle is simply hitting "refresh" in the browser. It gets confusing when you start to run in to how JavaScript does everything asynchronously, and is tricky to debug, but for a bright child under close tuition these problems can be overcome.

LEGO Mindstorms is definitely up there at the top of the list. Most schools now super-glue the bricks together to create pre-made models that can't have bits nicked off of them, but this shouldn't be a problem at home. Over on the Times Educational Supplement site (website forum for the UK's weekly teaching newspaper), the "what programming language is best for children?" topic comes up pretty regularly. Lots of recommendations over there for Scratch as an alternative to Mindstorms - bit more freedom than Mindstorms, again probably better for the brighter student who could also be given a soldering iron.

I've found that slower pupils can still have problems with Mindstorms, even though the programming environment is "graphical" - there's still a lot going on on screen, and there's a fair bit to remember (this was an older version, mind - haven't tried the snazzy new one yet). In my experience, the best all-round introduction to programming is probably still LOGO - actually a considerably more powerful language than most people give it credit for. The original Mindstorms book by Seymour Papert (nothing to do with LEGO - they nicked the title of the book for their product), one of the originators of LOGO, is the canonical reference for teaching programming to children as a "thinking skill" and for the concept of Constructionism in learning.

We've had classes of 7 or 8 year-olds programming LOGO. Note that we aren't aiming to make them "software developers", that's a career path they can decide on at some point post-16. At a young age we're trying to get them to think of "computer programming" as just another tool - how to set out a problem to be solved by a computer, in the same way they might use a mind map to help them organise and remember stuff for an exam. No poor child should be sat down and drilled in the minutia and use of a particular language, they should be left to explore and figure stuff out as they like.

David Hicks
+6  A: 

I'd go with Scratch, some points regarding it.

  • It's a graphical programming language. It isn't text based (this might be positive or negative). It does make it more intuitive and easy for kids (7 and up).
  • It's actually highly object. The objects you write these graphical scripts have the code attached to them and can be reused and moved around.
  • Very Important: quick and impressive results. Kids need to get going fast and get results in order to get hooked.

I'd like to note that although many of us started programing at a young age in basic or logo and because programmer later in life doesn't mean those are good languages to start with. I think that kids today have much better options, like scratch or Alice. Text based languages (python, ruby, basic, c# or even c) are dependent on external libraries and tools (editors, compilers) while something like Alice or scratch is all inclusive and will teach kids (not aimed at teens) programming concepts. Later they can move on and expand their learning.

Rotem
+2  A: 

As I said here, I'd go for Squeakland and the famous Drive a Car example (powered by Squeak).

Smalltalk syntax is simple, which is great for children.

And later as the child evolves, he can learn more complex and even very advanced concepts that are also in Squeak (eg. programing statefull webapps with automated refactoring and automated unit tests!).

And like @cpuguru and @Rotem said, Scratch (also Squeak based) is great too.

Sébastien RoccaSerra
A: 

I know in the first few years of high school we were 'taught' Logo, and strangely, HTML. After that, the progression went to macros in MS Office, followed by basic VBA, followed by Visual Basic.

James Inman
A: 

There's a good article about this over on familyinternet.about.com.

17 of 26
+1  A: 

I think Context Free Art might be a good choice, with output of graphics, it makes it a lot of fun learning about context-free grammar.

McN
A: 

Although I have tinkered with LEGO Mindstorms (and enjoyed it) in the past I would thoroughly recommend XNA Game Studio for the following reasons:

  • It involves creating something many children will be interested in (games).
  • It's free.
  • It's a real language (C#) and a real IDE (Visual Studio).
  • You get to learn OOP.
  • It's something the parents are going to find as much fun as the kids are.
Dr Zimmerman
A: 

How about AIML? Not so much a programming language, but you get instant fulfillment and because its all about artificial intelligence it will likely trigger his (her?) sense of excitement.

George Mauer
A: 

I started programming in Flash.

"toy language" meh meh meh.

and before that a tiny amount Logo at school

I have no idea about mindstorms, but I imagine it would be good.

I think that, unless there is a real driving urge to learn, then it could get frustrating with just input and output command line driven programs at the start.

With a bit of instant gratification, had by moving some pictures around on the screen, triggering a few sounds here and there, can be a bit more appealing of a result than building a cash register program, making a fizz buzz program etc.

"Look Grandma, I built a web page!" - even starting with HTML and some javascript, with tables and font tags everywhere, and being able to share what is developed with someone who is not technical will probably be more beneficial in the long run than 30 lines of C coded to appease a code crazy father. Which may or may not be the case

Assembler
A: 

What about Stagecast Creator?

I've been using it with my 7 year old daughter (we started when she was 6).

Don't be fooled by the kiddie interface. Once you start to use it, you realize it's teaching many complex ideas. It's sequential processing, and it's all graphic driven. You define rules for characters by defining 'if the picture looks like this then make it look like that' type functionality. Characters can change appearances, make sounds, move other characters, respond to the keyboard and mouse etc.

It teaches about if..then..else logic. Order of operations (As it processes the first rule that is true). Has a debugger so you can step through your code etc.

A very good tool for getting your young one discovering the thought processes behind programming, and a fun and easy way to determine if they're interested in this type of thing.

Once you've determined that, you can move onto a 'real' language.

Mikezx6r
A: 

Python is a great first programming language, and it can be used for exercising concepts of procedural and functional languages.

The free book A Byte of Python is an easy introduction, written for beginners, and it's available in several languages.

muriloq
+9  A: 

Full disclosure: I'm one of the guys who invented Kid's Programming Language, which is now http://www.Phrogram.com, which others have recommended here. Let me add some programmer-oriented info about it.

It's a code IDE, rather than drag-and-drop, or designer-based. This was intentional on our part - we wanted to make it easy and fun to do real text-based programming, particularly programming games and graphics. This is a fundamental difference between us and Alice and Scratch. Which you pick is a matter of the kid, their age and aptitudes, your goals. Using them serially with the same beginner might be a great way to go - if you do that, I would recommend Scratch, Alice, Phrogram as the order. Phrogram has worked best for 12 years and up, but I know dads with 6 year olds who have taught their kids with it, and I know 10 year olds who have taught themselves with it.

The language is as much like English as we could make it, and is as minimal as we could make it. The secret sauce is in the class-based object heirarchy, which is again as simple, intuitive and English-like as we could make it. The object heirarchy is optimized for games and graphics. 3D models are available, and 2D sprites. Absolute movement using screen coordinates is supported, or relative movement ala LOGO turtles - Forward(x), TurnLeft(y).

The IDE comes with over 100 examples, some language examples (loops), some learning examples (arrays), some fully-functional games and sims (Pong, Missile Command, Game of Life).

To give you a sense of how highly leveraged we made the language and the IDE: with 27 instructions you can fly a 3D spaceship model around a 3D skybox, using your keyboard. The same with a 2D sprite is 12 to 15 instructions.

We are working on a Blade-compatible release of Phrogram that will allow programs to run on the XBox 360. Yeah, the XBox, on your big TV. Nice motivator for getting a kid started? :)

Phrogram includes support for class-based programming, with methods and properties - but that's only encapsulation, not inheritance or polymorphism.

A tutorial and user guide is available,

My own ebook is available at Amazon and other places online, "Learn to Program with Phrogram!," and gets a beginner started by programming the classic Pong.

Phrogram Programming for the Absolute Beginner, by Jerry Lee Ford, Jr., is also available, as a paperback, at Amazon and elsewhere.

A: 

When my daughter was about 6 or 7 years old I showed her Logo - should thought it was fun drawing the shapes - but then lost interest.

When she was 10 I then tried Squeak - and she thought that was great. She quickly picked up on the Smalltalk syntax and her much fun. I also tried Greenfoot - but with less success.

I think Ruby might be worth a go to (I use Ruby from time to time - good stuff!)

Now she is more interested in other - non-computing - activities.

So these days, I would say that Squeak is worth a try. What about Hackety-Hack. haven't tried that with kids yet but looks interesting.

Simon Knights
+1  A: 

Try [Guido van Robot][1]. It's an excellent introduction to robotics, and it's a great way to introduce kids to the programming side of things (vs the "building the robots" side).

JPLemme
A: 

There's a new book called "Hello World: Computer Programming for Kids and other Beginners" by Warren and Carter Sande that I bought for my 9 year-old to start out with. He'll learn programming, and I'll learn Python.

Brad Mellen-Crandell
A: 

Scratch.

Don't let the cartoon-like results fool you. Kids love this thing and it offers most of what you'd expect in a programming language: loops; conditional logic; events; subroutines; and object-oriented programming.

Other things to like:

  • Excellent documentation
  • Versatility Some kids like games. Other like to tell stories or create cartoons. Others like making music or graphic effects. All can be done with Scratch. Kids can even post their programs to Websites they create as part of multimedia/web classes.
  • Environment Graphical development environment in which programming elements are snapped together. Shape and color are used very well as visual cues.
  • Social coding Large collection of community-created programs with ratings system that kids can use to get new ideas, figure out how to solve particular problems, or share their creations with their peers.
  • Hacking It's very easy for kids to add their own customized sounds and draw their own characters. Reminds me of digital construction paper.
  • Approachable The interface is simple enough that kids can start using it with very little in the way of introduction.

Most importantly, Scratch can be run on Windows, Linux, and OS X, so schools with mixed hardware setups won't be left out.

Rich Apodaca
A: 

Logo

is

awesome

xxxxxxx
+1  A: 

Check out PythonTurtle.

Amir Rachum
A: 

PHP or Visual Basic. I started out with PHP when I was 9 and now I only like a hundred languages lol. My favorite's PHP and C++.

BOTNETWRITER
A: 

Brute force

"Do it or else!"

leppie