Many of us have not forgotten the joy of playing with toys which let your mind run free: Lego blocks, Erector, etc. On the other hand, it appears that the larval programmers of today are skipping the stage of development involving the digital equivalents of such toys. Specifically I am talking about Logo, BASIC, and the like. There are now people who see nothing wrong with allowing Java or web frameworks to form a child's first programming experiences.

The supposedly useless toy languages of old had something no modern system can lay claim to: simplicity, of the "what you see is all there is" variety. A BASIC programmer, like the Lego architect, would exercise creativity (say, in playing with graphics) by learning to combine simple building blocks ("putpixel(x,y)") in new ways - as opposed to the pseudo-creativity of mining a thick reference manual for new API functions ("draw_fancy_rotating_cube()"). Systems laden with accidental complexity (just about anything you can get your hands on today) heavily encourage the latter.

Even if you boot up a Commodore-64 emulator or the like for your children to learn on, the problem remains unsolved. The kids will eventually want to play with concepts that cannot fit in the sandbox, and will be forced to confront the unrestricted ugliness of the underlying system.

Come to think of it, my recent visit to a toy store lead to a saddening discovery: Lego itself has undergone a similar transformation. The beloved universal "buckets of bricks" have mostly disappeared, to be replaced with kits reminiscent of model airplanes, where the blocks are designed to fit together in a strictly defined way.

Is it any wonder that so few grow up to yearn for a computing system where knowledge does not consist in memorizing reams of special cases? Where skill does not consist in working around others' bugs cemented in place? Where developing expertise means something other than the memorization of trivia?