Molecular programming is the study of computation with "molecules", which are extremely simple computational agents that interact with each other through relatively simple, predefined rules to perform computation. From an engineering perspective, they provide a formal background to ongoing research in nanotechnology. From a scientific perspective, they provide some kind of insight about the mechanisms that effect computation in real-world chemical systems. From the perspective of distributed computing, they provide a kind of "maximally distributed" setting for studying computation.