I started my son at five with MIT's Scratch [1] followed up by Lego Mindstorms [2].
I then created a text adventure engine [3] that could run adventures written in a very simple Lua based DSL so he could make a simple text game [4]. Mom helped with spelling and grammar and I suggested a puzzle but he wrote the adventure himself.
Then I transitioned him to Lua on the iPad with Codea [5] and he (with a little help from me) made a game called StarFighter [6].
I choose Lua because it is a great intro language. Very simple with minimalistic syntax, few concepts, few primitives, few keywords, dynamically-typed / garbage collected, variable arity, no real gotchas, good tool support, great speed, the ability to access a key in a hash either using bracket or dotted notation, and one of the best programming books for any language (PiL).
But it also scales well; closures, first-class / true anonymous functions, metatables / metamethods, nice simple API for talking between script and C, tail-call optimization, coroutines, short circuiting operators.
And, the path from Lua to JavaScript is very straightforward. In fact I'd say that mastery of Lua would make you a mid-level JS programmer right out of the box...
The next step was JavaScript and ImpactJS [7]. I got him two books [8][9] and he loved them.
He is now doing HTML/CSS/JS and is in the middle of a fantastic book called Pro Javascript [10]. Once he is done with that book I am going to consider him on his own...
But just to give you an idea; he is 11 now and I am learning Scala for work. He's been watching videos with me and I paused it and ask questions and then I asked him where he thinks the presenter is going to go. He ran to his Ubuntu desktop and apt-get'ed Scala and cranked up a REPL session and showed me; he was correct!
I started my son at five with MIT's Scratch [1] followed up by Lego Mindstorms [2].
I then created a text adventure engine [3] that could run adventures written in a very simple Lua based DSL so he could make a simple text game [4]. Mom helped with spelling and grammar and I suggested a puzzle but he wrote the adventure himself.
Then I transitioned him to Lua on the iPad with Codea [5] and he (with a little help from me) made a game called StarFighter [6].
I choose Lua because it is a great intro language. Very simple with minimalistic syntax, few concepts, few primitives, few keywords, dynamically-typed / garbage collected, variable arity, no real gotchas, good tool support, great speed, the ability to access a key in a hash either using bracket or dotted notation, and one of the best programming books for any language (PiL).
But it also scales well; closures, first-class / true anonymous functions, metatables / metamethods, nice simple API for talking between script and C, tail-call optimization, coroutines, short circuiting operators.
And, the path from Lua to JavaScript is very straightforward. In fact I'd say that mastery of Lua would make you a mid-level JS programmer right out of the box...
The next step was JavaScript and ImpactJS [7]. I got him two books [8][9] and he loved them.
He is now doing HTML/CSS/JS and is in the middle of a fantastic book called Pro Javascript [10]. Once he is done with that book I am going to consider him on his own...
But just to give you an idea; he is 11 now and I am learning Scala for work. He's been watching videos with me and I paused it and ask questions and then I asked him where he thinks the presenter is going to go. He ran to his Ubuntu desktop and apt-get'ed Scala and cranked up a REPL session and showed me; he was correct!
----
[1]: http://scratch.mit.edu/
[2]: http://mindstorms.lego.com/en-us/default.aspx
[3]: https://github.com/shawndumas/adventure.lua
[4]: https://github.com/shawndumas/adventure.lua/blob/master/theT...
[5]: http://twolivesleft.com/Codea/
[6]: https://gist.github.com/shawndumas/2762088
[7]: http://impactjs.com/
[8]: http://www.amazon.com/HTML5-Game-Development-ImpactJS-Cielen...
[9]: http://www.amazon.com/Building-HTML5-Games-ImpactJS-Introduc...
[10]: http://www.amazon.com/Professional-JavaScript-Developers-Wro...