Start out with an electronics kit and get them a small 8-bit microcontroller. Use assembly. Don't go for x86 either-I pity Intel for the monster they have created. Freescale's S08 core is a nice starter-you can get a programmer for ~ $30. The reason this is better: They get to build a circuit that has a function. No matter how simple the circuit is, it is built to fulfill a specific function that they can understand. The microcontroller code can is programmed to make the circuit behave in different ways. The reason this is more fun that high-level programming for a 12-year old: At this stage in life, they want to become in control. Hoping that your event handler ends up being called is not being in control. Wondering what on earth the computer is actually doing when you give it a command is not being in control either.