As long as I've been a father, I've anxiously waited until the day my kids were old enough that I could bring them into the enchanted realm.
I discovered Scratch last year, it's really a great visual programming environment for kids, especially ones who are just learning how to read.
It's "drag and drop" style programming language that packages some pretty sophisticated programming ideas in a way that I think makes it easy for newcomers to understand. There is a multimedia focus, you basically have a "stage", and manipulate "sprites", play sounds, and manage input. There is even a "sensor board" you can buy for it that lets your kids experiment with physical computing. (I have not tried that yet but I intend to one day).
If you're and experienced developer, it's easy to give it a quick glance and dismiss it as a toy, but browse the online gallery and play with some of the "applications" developed in it by others. You will be impressed. My kids love it. I think part of it's beauty is that the designers (a group at MIT), seem to have set forth a goal of teaching the core fundamentals of developing algorithms, and omitting from the language of most traditional architectural aspects. I'd almost go so far to say that the architecture is fixed, there are no concepts of a "class", or subroutines, for instance.
I have wondered if its efficacy despite its simplicity is what drew me to Scratch from a sense of nostalgia for my early days on the Commodore. There was a focus on algorithms for me back in those days too. Doing something was more important that how it was done, or the technical debt incurred.