In my experience, there is always one family that always gives the good Christmas and birthday presents, the ones that you remember into your adulthood.
For me, that family was my mum’s brothers family, and apart from their enormous generosity they showed our family, there are two things that came from them that I can say had some influence on my development as a computer geek. The last one was an Amiga computer which just helped me stay in touch with the rest of the computing world whilst everything had moved onto PC’s and the regurgitation of Windows 95 and this new ‘multimedia’ buzzword that these PC’s could do. Pfft.
Anyhow, the other gift, was a huge Lego set when I was about 3 years old. As you know Lego is modular, each piece does its specified task, and if you ever had to unit test a Lego block, it’d have well defined behaviors to make this a straight forward task (we’d hope).
Now when you start considering the connections Lego pieces can have with each other, there are a number of permutations possible. Lego’s are blocks that form structures in our space and have to live by the rules of gravity and laws of ‘building strength’. We can shape (and even force) these structures to take somewhat unusual shapes that challenge the contract that each lego block has with its neighbours by trying to squeeze the sides of piece into itself (to allow a triangle or odd shape piece to fit). Or we can challenge the laws of gravity by arranging the pieces one on top of the other until the slight variations in each piece cause the stack to start arching over to one side and eventually fall.
Such problems are unforeseen during the design of the Lego piece. Where do we go from here? Do we enhance our existing Lego block with new means to cope with these conditions? Such as a fan to keep the piece in an orientation when the promiscuous falling condition is met, or a removable lego side to allow for those hard to fit pieces to overlap somewhat.