There are many "teaching" languages, though a contender these days is harder to establish, given the amount of choice available. For very young kids, the Scratch1 framework is appropriate, while for slightly older kids, Python might be a better option.
I'd like to suggest another option (for slightly older kids), that might seem atypical at first: Go! Yes, I do believe the "Gopher language", used in many real production servers today, can realistically do double duty as a beginner language for kids.
This is the point where I make an analogy, and it goes something like this: I think Go can be to kids today what BASIC2 was to me3, i.e. as a way to experiment with and play around in a "text-mode" world, while getting very quick feedback, and building "complete" programs.
An objection many people have is along the lines of, "Oh no! You don't get it! Kids love only flashy, shiny stuff! You need animation, and nothing else will do!" Perhaps several kids do; perhaps several adults do as well. These are not my target audience; I'll leave it at that.
No, I do believe that many kids will love the parameterized4 freedom offered, and learn to create and modify small Go programs. One of the best sources of fun for me were old BASIC games books5, from where I used to type out entire6 programs (and then spend time fixing the inevitable typos that resulted).
Go has a simple syntax, that's easy to pick up (you can do a lot with just int
s and string
s!) and quick to run. All7 that remains to be done is to come up with a series of little games8, of increasing complexity and lots of fun.
Statutory Warning: Heh, I'm just writing this in a burst of optimism (this might be a useless idea).
GOSUB <line_number>
syntax.↩gofmt
, go run
and all that goodness.↩