Three trends in computing are changing the nature of computing. Web services and P2P systems are increasing the free flow of information and services, thus creating a global village. Sensor networks promise to change mechanical devices into intelligent, networked machines--increasing our safety and efficacy by providing assisted living for the elderly, smart civil structures, and pervasive computing. Multicore architectures promise to make personal computers orders of magnitude faster than current ones.
These trends require a paradigm shift in our programming models and languages: we must be able to support scalable parallel and distributed computing for a broad range of applications. I will discuss some key concepts that will help address the challenge of programming such systems: these include actors, adaptive distributed control, and probabilistic models of computation. I will illustrate the ideas based on our research.