In general, a distributed computing system is one in which more than one computer collaborates in the implementation of a calculation. In this excellent paper, the authors first suggest a more precise definition of such systems, since no consensus exists on this point. They then discuss the practical reasons that have led to their development, such as the need for decreased turnaround time and increased reliability, and give examples of some applications.
The authors then discuss distributed programming--that is, the special programming techniques needed to handle such applications. Traditional sequential programming is often inadequate in situations where multiple processors are working in parallel and cooperating among themselves. The authors define the general requirements of languages for distributed programming and survey several representative examples. They draw a distinction between languages designed for systems in which the participating computers have their individual memories plus a communication network and those for systems that share a common memory. Some selection was surely needed here as the authors remark that at least 100 such languages are known to them, and more probably exist by now.
The paper concludes that no obvious leaders have yet emerged among distributed programming languages. Given the state of flux in the field of hardware, this will probably be true for some time. This well-written and most valuable survey of the subject lists more than 200 references for those who wish to dig more deeply.