Sunday, January 15, 2006

The complexity of nature completely boggles my mind. Ever try sketching a real-life tree? It's impossible to draw all those leaves. Each leaf is complex in itself, and there's tonnes of them. You can only just get the general shape that the leaves make. It's absolutely incredible how such a thing as a forest can even be created - all those trees, each with hundreds or thousands or leaves, not to mention the smaller bushes, animals, insects, bacteria, etc.

Nature's power comes from an incredible amount of parallelism and distributed systems that result in a hierarchy of complexity. Let's ignore the parallelism and hierarchy of electrons, protons, subatomic particles, atoms, elements, compounds, molecules, etc. Cells, which in themselves contain smaller components, perform relatively simple functions (in that we can study and understand generally what's going on) that don't seem to do much in isolation (eg. just creates some proteins or move ions around), but working with other cells, you suddenly have a single strand of grass, or a tree, or a lady bug. It's like an impressionist painting. Look at it closely and all you see are blobs of colour. Take a step back and all of a sudden, you see how the blobs work together to form something remarkable. This complexity from the combination of very simple things is really remarkable.

As if a single organism isn't complicated enough, nature is capable of replicating this complexity many times simultaneously. It's like a huge distributed system. It's easy enough to keep track of the growth of one piece of grass by measuring it with a ruler, but suddenly, there's maybe a hundred pieces of grass and our simple way of tracking grass growth is completely overwhelmed by the distributed grass growing. Each piece works relatively independent of the rest, each piece doing its own thing. 100 things doing their thing at the same time is an amazingly efficient way of doing things.

Here is where computers fail miserably. They generally just do one thing at a time. They just do that one thing really fast, then go on and do something else in an attempt to overcome its single minded nature. One person can't plant a forest. 20 people can. 100 makes it even easier. One ant can't survive on its own. A whole ant hill can thrive. The future of computing is doing many things at once inside one computer (multiple cpus, multiple cores) and spreading the complexity across multiple computers, mimicking the hierarchy of complexity, parallelism, and distributedness of nature.