Thursday, May 22, 2014

Rube.

http://www.reddit.com/r/programming/comments/24g6al/i_have_officially_failed_at_programming/ch76623

Computers are Rube Goldberg machines where you can't actually see the machinery, only the effects of it, like one of those sculptures made of trash which, when shone upon by powerful spotlight, casts a shadow depicting two people sitting with their backs against each other drinking wine.

In computers the shadow cast by the Rube Goldberg is constantly moving as the machine reacts to the world around it, and spectators demand that the shadow dances across the wall at an incredible pace with ever-increasing detail. And the people interact with the shadow; they watch as it responds to the lightest touch by completing, in a few hundredths of a second, complex mathematics and logic so the shadow can stimulate the hypothalamus of the spectators to produce just a tiny bit more endorphins.

But nobody has ever seen the machine which throws the shadow onto the wall, not even we who built it. We may claim to understand parts of it, but not in any detail, and we definitely do not understand how everything works together. Nobody has seen that the machine is made up of trash, how a used can of soup rolls down rotting plank and barely misses a completely different part of the machine (a tiny white mouse inside a wheel who runs when frightened by a cat in a cage behind it) which I hastily put together right before an important demonstration.

We the builders of this machine have watched the shadow for hours, often pausing it or looking at it in slow motion, in an attempt to get it just right. As we watch, we poke and prod the machine with long sticks until the shadow behaves the way we want, hoping that we didn't bump into anything important which controls another part of the machine.

We are several people working on this ever changing machine, sometimes working together, but most often working on completely different parts of it at the same time. I might add an empty Styrofoam cup and spend a few hours tweaking it until the shadow looks just like a nose, while my colleague sets up a rifle aimed at a bird that will fall into a bucket pulling on a string, which isn't connected to anything yet, but will be very important some time in the future.

And because we do this every day we assume that it has to be this way. Nobody else understands their own machine, so there is no expectation for us to understand this contraption we have built. And look at the shadow, it is beautiful, and works almost flawlessly, and you quickly learn what can cause the machine to fall apart, and try not to do that.

And we use words like architecture and foundation and scaffolding in an attempt to solidify the machine and hide how fragile it actually is. We draw diagrams with boxes and arrows representing the trash and how it interacts with itself, and these diagrams are used to get new team members up to date on how the machine works. The newbies recognize our diagrams as patterns and best practices for sticking trash together, and we have even named some of the more clever combinations of trash. But the machine is constantly changing, and the diagrams are quickly outdated, and become garbage, which someone very clever figured out how to incorporate into all the other garbage. And so the machine is constantly evolving, growing in complexity, always at the verge of collapsing under its own weight, if not for the team of people gently poking at it and supporting it, always careful to check that the shadow hasn't changed (too much).

No comments :