Cyber-physical systems (CPS) combine computations in embedded systems with physical dynamics, typically interconnected using networks. Predictability and reliability of combined software and hardware systems are crucial for CPS design (Lee, 2008), but all parts in a real CPS are not necessarily predictable. Specifically, operating in a physical environment introduces different aspects of uncertainty, including uncertainties in sensors, the physical dynamics of the system itself and interactions with other systems or humans. There is a large body of knowledge about reasoning with uncertainty in fields and topics such as statistics, automatic control and sensor fusion. However, how to program for uncertainty in complex cyber-physical systems needs to be better understood. What are the fundamental software abstractions? How do they compose and interact?