Twenty years ago the vast majority of programs were sequential and executed in a single location. Improved wired and wireless network technologies has relaxed both of these constraints, and many programs are concurrent, parallel, distributed or mobile. In these paradigms the programmer must not only specify the computation, or algorithm, but also the coordination, e.g. communication, synchronisation and partitioning. There are well-developed notations for specifying, and reasoning about, computation at various levels of abstraction. In contrast, while a range of parallel and concurrent coordination abstractions are available, distributed and mobile coordination abstractions are less well developed. Indeed in practice low-level coordination is still widely used, e.g. send/receive, that is analogous to GOTO for computation and similarly harmful.
The challenge for programming language designers is to develop coordination abstractions and associated reasoning frameworks, and is similar in scale to that posed by control abstraction in the 1960s and data abstraction in the 1980s. After elaborating the challenge, the talk focuses on Mobile Coordination, presenting a mobile Haskell dialect using higher-order communication channels, with associated high-level abstractions, mobility skeletons. We also present Autonomous Mobile Programs, that periodically use cost models to inform decisions about where to execute in a network.