  Macroprogramming refers to the theory and practice of conveniently expressing
the macro(scopic) behaviour of a system using a single program.
Macroprogramming approaches are motivated by the need of effectively capturing
global/system-level aspects and the collective behaviour of a set of
interacting components, while abstracting over low-level details. In the past,
this style of programming has been primarily adopted to describe the
data-processing logic in wireless sensor networks; recently, research forums on
spatial computing, collective adaptive systems, and Internet-of-Things have
provided renewed interest in macro-approaches. However, related contributions
are still fragmented and lacking conceptual consistency. Therefore, to foster
principled research, an integrated view of the field is provided, together with
opportunities and challenges.
