Programming as Play
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?
The thing about Lego is not entirely true, you can still easily and cheaply buy the basic blocks without a model associated.
Agreed. I am apparently of a similar vintage to yourself 🙂 I remember having very few types of lego blocks and had a blast, I may have made the model as suggested once and then everything else was made up. I get the same type of joyful feeling from programming, experimenting with code to see what works and what doesn't, breaking things and then fixing them. Programming has to be joyful, life has to be joyful, otherwise what's the point? Thanks for that post.
Great little write up. Buford also has hit the nail on the head. It is that form of constructivism that facilitates learning greatly (with this school of expertise). Not being handed code off the shelf and building it for yourself can be both fun and helps degrade that learning curve!
There is definitely something in what you say about kids learning to be creative instead of having toys handed to them on a plate. Jared Diamond, in his excellent book "Guns, Germs and Steel", mentions that kids from poor countries, such as in Africa, actually are far more intelligent than kids in developed nations because of this very thing. The poor kids have to improvise and invent, using their imaginations, learning new skills, since they don't have store-bought toys to play with.
On the other hand, kids will always be kids. My son has the modern lego sets that make up fire engines and such like. Initially he'll start off making things to plan but, as months pass, the things he makes morph, getting further and further from the original designs.
Computer languages haven't lost all of their simplicity. I would hate to introduce a child to programming through Java or C# but something like Python still has the simplicity of BASIC. There are two things missing today, however: The Magic of computing, and the do-it-yourself spirit.
People of a certain age, who grew up with the first PCs (before the term "PC" was appropriated by IBM), knew the Magic. Computers in popular culture were huge blue machines in air-conditioned buildings, with sexy flickering lights and stuttering tape drives. They were all-powerful and mysterious - Magic. What a buzz it was to have that magic at our finger-tips when PCs first appeared!
Back then, computer magazines were full of BASIC listings you had to copy into your PC by hand. This do-it-yourself attitude extended beyond the actual code - I fondly remember creating a light-pen from the plans in a magazine, using a the barrel of a large magic marker, a photo-transistor, an RS-232 cable and a scrap of vero-board. Actually using the clumsy ligh-pen to draw on the screen was another form of magic. There was a real feeling of accomplishment and creativity.
Kids these days grow up with computers, there is no magic any more. Nor are there the do-it-yourself magazines to spark their creativity. This, I think, is the problem, not so much the modern computer languages.
I learned to code using Python and a wrapper around Pygame, around 2000. My job today (from which I am slacking off to read proggit) is using Python.
Python seems to be a good choice for this, as you get the immediacy of BASIC or Logo, but it scales up to serious programming much better.
I don't agree at all. I think Python is a much more versatile and simplified language to learn programming with than BASIC ever was. The syntax is simple, readable, and most of the functionality you'll ever need is already built in. And unlike BASIC, learning Python can scale upwards without limit because it is a serious programming language as well.
To that end, I wrote a book designed to teach kids and young adults Python programming. "Invent Your Own Computer Games with Python" is distributed for free under a Creative Commons license. Check it out, and tell me what you think.
http://pythonbook.coffeeghost.net
[...] and then after imbibing more Dr Naggum and following his prescription, I think, you ended up saying you wanted to be a Common Lisp [...]