The difference between theory and practice is
- in theory, there is no difference
- in practice, there is.
A simulation of self-assembling robots is theory.
An actual pile of 1,024 self-assembling robots is practice.
Less tritely, you have zero information about flaws in your simulation until you try to apply it to/in the real world. Your simulation is excellent at helping you identify logical flaws in your design. But if you fail to account for something (crosswinds, say), then your simulation simply won't help you find it.
It's that whole "unknown unknowns" thing, man.