My son is enthusiastically programming simple games in Scratch. However Scratch is a very simple programming environment (no subroutines even), and I can see that soon he is going to need to move on to something else.
Does anyone know of a good learning language that makes graphics easy but provides "real" programming features like data structures, functions, arrays and lists?
Bonus points if it runs under Linux (Ubuntu). An answer of the form "language Foo with library Bar" is also an option.
It might be just a little bit larger of a jump, but Python with PyGame will allow your pupil to make many of the same sorts of programs as he or she is already used to with Scratch, but with very tight control over how the whole thing works.
Well, there is venerable old Logo -- not sure about structures but you do get lists, functions with parameters, and graphics are very straightforward. There are plenty of good implementations, too. Logo has even been likened to 'lisp without all the parentheses'.
A nice review here suggests Alice and Shoes after Scratch -- I have no personal experience in the matter, but from the review they seem worth checking out.
How about lua?
There is nice graphic "engine" called LOVE which is fully programmable in lua. It has nice documentation and it's not very hard.
There are also several other similar engines using lua:
There was another 2d engine, but I can't find it at the moment, it was similar to LOVE, but with a little different approach to things.I would recommend LOVE for starters as it's very easy, has nice tutorials and most importantly you can do nice stuff right away.
Also lua is commonly used as game scripting language. For example all addons for World of Warcraft are written in lua, in fact all of the interface is written in lua. It means that it's very easy to find answers to game related questions in lua. Also if you happen to own a game which uses lua as scripting language, you could easily add your own stuff to it.
I wrote this from game perspective, but there are quite a lot projects which use lua as scripting language.
You could also try python, but it doesn't have so good out of the box, ready to use and easy to learn/understand tools.
Also here's a link to lua manual.
If Scratch is starting to get a bit limiting, but they're not ready for the hardships of text-editor coding, take a look at Scratch-derivative "BYOB" (Build Your Own Blocks). Seriously, it turns Scratch into a grown-up programming environment with functions (and hence recursion), data-structures, multithreading and everything!
There's also Panther but I was less impressed by it (creating new blocks in Panther seems to require coding their function up directly in Squeak, while in BYOB you can just build them in the usual drag-n-drop Scratch style).
Scratch is written in Squeak (which runs on Linux, Windows and Mac) so I'll say step up to Smalltalk! The only problem is the lack of a very good beginners book on the language, which is strange when you consider its origins. However, the basic concepts are easy to learn (almost no syntax) and the environment encourages experimentation.