Model of algorithmic DNA nanotube growth from a DNA origami seed (grey). Adapter strands (red) attach at specific locations on the seed, encoding the 6-bit input. DNA single-stranded tiles (blue, brown, yellow) attach in locations that match their local input, leading to an algorithmic arrangement of molecules.
Credit and copyright: Erik Winfree

Third Bit

Scientist: Well, biological systems usually have different responses to different circumstances, you know, a vine will climb a trellis by wrapping itself around the rails, while the same vine will climb a brick wall by growing holdfasts that glue itself to the wall. Different input, different output. It's true at the molecular scale as well. The inside of a cell is as messy as your back yard. So, for example, when a cell wants to divide, it needs to find its chromosomes and put one copy of each chromosome on each side of the cell. There's a self-assembly process that builds microtubules bridging the chromosomes and other parts of the cell; wherever the chromosomes are, that's where the microtubule bridges get built, but there's a complex process of random trial and error that makes it happen. Different input, different output. If you're going to tell me, "if there's any logic to it, then it's an algorithm" -- well, then I'll conclude that it's an algorithm.
Computer Engineer: That seems a bit fast and loose. When I program an algorithm, I'm telling the computer exactly what it's supposed to do. The code tells the computer exactly where to place every byte, exactly what instructions to follow, exactly what tests to perform, exactly when to enter and exit loops. There's a mechanism for every step. It's not just a jumble of stuff happening, with some logic here and there, sort of.
Philosopher: Well, that's not quite fair, is it? Think about it. When you write a program -- and yes, just cause I'm a philosopher doesn't mean I haven't written a program! -- you don't actually specify every little thing the computer should do. You let the compiler handle the little details. You let the operating system decide where in memory your data is stored, and when your program gets to run. Stuff like that might as well be random, as far as you're concerned. And heck, you rely on software libraries for solving certain tasks, and some of those algorithms really are random -- like factoring large numbers, or optimizing functions, or solving systems of constraints. So really, a lot of computer algorithms are a mixture of random and deterministic behaviors. Or might as well be viewed that way.
Scientist: Molecular self-assembly is like that too. Molecules diffuse around in solution, due to Brownian motion. Remember, temperature is just a measure of the kinetic energy of molecules -- how much they jiggle. And they jiggle a lot. So, self-assembly involves molecules randomly moving about, with no rhyme or reason, but when they happen to bump into the right location, they recognize it and stick. At least sometimes. But that can be enough. If the right piece sticks in the right location, because it fits just right, then all this random jiggling can put together a really complex object. It's a combination of randomness (Brownian motion) and deterministic behavior (sticking when the local fit is good).
Tycoon: I like this idea of programmed self-assembly. If we can manufacture products by just making the pieces, and then shaking them around, maybe dumping them in a swimming pool and stirring -- hey, that sounds a lot simpler than building a factory for putting together a BMW.
Mathematician: Are you serious? Are you mad?
Farmer: Doesn't sound completely crazy to me. I mean, BMWs, no -- but haven't you seen those toys with a bunch of small wood pieces that have weak magnets embedded in them? If you put them in a box and shake them for a long time, voila! You get a soccer ball! Or a cube. Or a something. Maybe molecular self-assembly is sort of the same thing, but smaller?
Computer Engineer: Yeah, I know those toys. But they're not programmable. Use these pieces, and they fit together like a soccer ball. Those pieces, they fit together like a cube. There's no algorithm. What I want is a programmable toy. Same pieces, but depending on how I program it, it will self-assemble a ball, or a cube, or triangle, or a tube.

BACK <-- BIT 1 BIT 2 BIT 3 BIT 4 BIT 5 BIT 6 --> NEXT