Massively parallel self-assembling systems present a promising alternative to conventional manufacturing. Recently, various successful instances of self-assembly have been demonstrated, including applications for commercial products such as RFID tags; however, the full impact of this approach will only be realized once these systems can be programmed or reconfigured on demand (i.e., essentially in software, and without significant hardware changes). In this presentation, we review several projects that lead towards such programmable self-assembling systems. A key concept to achieve this goal is the “programmable surface”, i.e., an engineered surface whose properties (surface forces, hydrophobicity, friction, etc.) can be controlled with high spatial and temporal resolution. We present several projects covering a broad range of issues from realtime control of surface properties, to designs that optimize binding forces between self-assembling components, to computational and algorithmic issues in the modeling of self-assembling systems.