Lego blocks and Software development
When I was a kid I spent hours playing with Lego. Back then, they were expensive and hard to get :-). I slowly grew my collection by a couple of small sets a year. Usually I assembled the original model only the first time, then I put all the pieces in a pool and I assembled many different things.
Now in a different place (and many years after), I bought one and started to play around. Then it struck me: is no surprise that I enjoyed building things with lego and now I enjoy building software. Usually I started with some idea in my mind of what I wanted to build (a plane, a spaceship, a robot) and then scrubbed the heap of parts looking for the right ones, and slowly assembly them together into bigger ones (always spending a significant amount of time looking for the right piece) until I created something that wasn't what I envisioned originally, but at least could pass for it :-D.
Don't you think the process is very similar to write a program nowadays?
You start with something in your mind, and start putting together small pieces (lines of code), search for the right part (in the APIs), group them together (in methods, classes and packages) following your mind, until you get something working that is not what you wanted at the beging but it serves it purpose!
(well, I guess most of the creative activities share common things, but I think is an interesting metaphor... )