Project idea: From Bambam to Lisp
Do you know Bambam? No, not this nice track by Sister Nancy, I mean the Linux "game" for toddlers. The screen is locked (all keystrokes and clicks go to the program) and every key pressed and mousebutton clicked results in a randomly places letter, image or sound. Very nice if you want to give your kid the opportunity to "use" your computer without damaging anything (well, anything other than the hardware).
Currently it is very simple. Imagine it would be more complicated, with rules that govern the placement of symbols. With some playing around, those rules should be obvious. When you write something intelligible, something different could happen, so you "unlock" more functionality by understanding the rules. The rules should start really simple and then allow for unlocking entire new modes of playing, maybe more complicated games (like TuxRacer). Then, at some point, one could have rules that involve very tedious typing until one can start the next game or the next level, but at the same time provide a scripting engine (some flavor of LISP for example) and some explanations how to use it. The kid could get rid of the annoying part of the rules by writing scripts. And then go on and use the programming language to find out more about the game(s) and ultimately about the programming language. In the end, it could unlock Wikipedia, YouTube and finally the whole WWW.
I heard so many stories of people breaking the parental lock in their parents' TV when they were kids. I'm sure today's kids can "break" many more such "locks".
I'm sure much has been done to introduce kids to programming, and some programs are out there that teach basic usage of mouse, keyboard and touch screen (and voice input?). I just aim for a continuous path starting at the level of Bambam (or even below).
For developing something, I guess any crazy experiment would be fun. The test subjects have a lot of time :-)
I took some time to re-write the old Bam Bam to get less and cleaner code that runs on Python3, putting some more features in it that should make it easier to modify it later on. My next task would be to include some kind of piano (preferably using a MIDI synth), but I have no experience with that stuff. I guess there is a decent MIDI library for Py3k that I can just use (with Pygame / inside Pygame?). Do you know one? Do you have other ideas for this project? I'll put the thing on Github as soon as I have done the next round of code cleanup (to get rid of most of the old code).
Another idea I had recently was to not go directly to Lisp one day, but explore the beauty of combinator logics instead. Now I have to actually read Smullyan's book on mocking Mockingbirds whereof I had previously read only a rehash of the part that deals with fixed-point combinators. Back then, I was so impressed that I subsequently had named my new laptop "sagebird", which is slang for such a fixed-point combinator.
Now I found some time to re-write the code even more, obtain some public domain graphics from the Tango icon project and some public domain sounds from pdsounds (which I cut a little bit) and finally made the rewrite public:
GitHub: Bam Bam Bam.
My son (now roughly 1.5 years old) is still hooked on this silly game!
In the latest version, every letter makes the sound of this letter (although this is really a German-specific thing for now). This makes a very different gameplay for my son, who is now really trying to use the keys on the keyboard to hear a specific letter. This seems to help him learn reading letters (and he loves it, which is the important part).
Now I'm impatient when I'll find time to implement more "modes" to play around with ideas. Hopefully someone else (with kids and a programming background) will fork and experiment. You're invited!
My brother wants me to port it to Android, which should be possible in principle, since the PyGame library (at least some parts of it) were ported. It would also be relatively easy to just re-implement it, as the code is just 3 screen pages long.
See also my other project ideas.