I was fortunate to grow up in a middle-class household where I had everything a young boy wished for: Living at the edge of a small village, nature started right across the residential street, with meadows, duck ponds, shrubbery — and a lot of dirt to play with. I also possessed a large variety of toys: wooden building blocks, a sandbox plus utensils, an electric model train, some Fisher Price™, some Playmobil™, Fischer Technik, … but my dearest toy was Lego™
I spend endless hours playing with those tiny plastic bricks. I had two huge boxes for them, plus some smaller bins. Sorting everything was an endeavor that took days; I did this (prompted by and with the help of my mother) several times throughout my childhood, only to see the multitude of bricks slowly disintegrate into chaos again.
Of course, when I got a new set on Christmas or my birthday, I first built the depicted model according to the plan. But the real fun was in devising a completely new thing; combining the bricks into something based on one's imagination (and limited only by the mass of available bricks). I built houses, towns, vehicles, space stations, … the older I got, the more sophisticated and closer to reality. When we did textile works in school, I assembled a primitive weaving loom and brought it into class. (The other pupils prefered to buy or lend a standard one made out of wood.) Later, I used Lego (especially the Technics subset) to construct machines and other contraptions, crossing over with other building sets, wood- and metalworks. Finally, as my interest moved to electronics, I still used it for tools or to experiment with robotics.
In retrospect, I see many similarities and parallels to programming and software development. Others have noticed this, too:
This excerpt is taken from the novel Microserfs by Douglas Coupland (Flamingo 1996), page 82.
Have you ever noticed that Lego plays a far more important role in the lives of computer people than in the general population? To a one, computer technicians spent huge portions of their youth heavily steeped in Lego and its highly focused, solitude-promoting culture. Lego was their common denominator toy.
Now, I think it is safe to say that Lego is a potent three-dimensional modeling tool and a language in itself.
First, Lego is ontologically not unlike computers. [...] [Its] discrete modular bricks are indestructible and fully intended to be nothing except themselves.
Second, Lego is 'binary'—a yes/no structure; [...] Third, Lego anticipates a future of pixelated ideas. It is digital. The charm and fun of Lego derives from reducing the organic to the modular; [...]
Blogger Gabriel C. shares this sentiment in a post titled Lego blocks and Software development on 27-Apr-2007:
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... )
A blog post from Steve Yegge on 08-Dec-2004 mentions this similarity, too, and goes on to criticize the brand's move from generic blocks to themed sets:
A programming language is just like a set of Legos, you know. When I was a kid I played with Legos, and built all sorts of pathetic, dumpy little houses and spaceships and stuff. I loved them. Those Legos let me build anything my imagination came up with. Decades later, Legos are still going strong, but they've turned into jigsaw puzzles. You can buy a Pirate Ship Lego set, and with it you can build… a Pirate Ship! And, and, you can move the people around on it! But try building a crocodile and you're screwed, unless the set came with a big misshapen Lego in the form of a crocodile. Of course then you're screwed if you want a lion. And so on.
With the right set (and number) of generically-shaped Lego pieces, you can build essentially any scene you want. At the "Downtown Disney" theme park at Disney World in Orlando, there's a Legoland on the edge of the lagoon, and not only does it feature highly non-pathetic Lego houses and spaceships, there's a gigantic Sea Serpent in the actual lake, head towering over you, made of something like 80 thousand generic lego blocks. It's wonderful.
Dumb people buy Lego sets for Camelot or Battlestars or whatever, because the sets have beautiful pictures on the front that scream: "Look what you can build!" These sets are sort of the Ikea equivalent of toys: you buy this rickety toy, and you have to put it together before you can play with it. They've substituted glossy fast results for real power, and they let you get away with having no imagination, or at least no innovative discipline.
When dreaming up a new project, there's always the urge to delve right into it, grab the first pieces, build a prototype. During construction, you almost always encounter challenges and problems you haven't thought of before, or even scrap the whole thing because an even better idea just occurred to you. The entire process of creation is laborious, but satisfying; you long for completion, imagine how cool it'll be when it's done. You push yourself towards completion, thinking: When this is accomplished, I can be proud, and will finally have a rest.
But the fact is: When it is finally done, there's this restlessness again, you're already sketching the next projects in your mind, looking forward to the next project that will again completely consume you. I've heard this from many model-makers (i.e. people building model railways, or RC cars): It must never be finished; there must always be something more to do.
With Lego, I always wanted to construct the perfect town, a fully-functional apparatus, and always was giddy with anticipation, how wonderfully I could then play with it, how useful it would be. But the moment I was done, that was all gone, and pretty soon I tore it all down to start anew. I'm a builder, and it must never be finished.
I abandoned Lego only very late, still used it in my teens to do science experiments.
Ingo Karkat, 07-Apr-2009