When programming language designs are presented, the examples are almost exclusively of correct programs. Most attention of programming language designers is indeed on the beauty and elegance of correct programs. For incorrect programs, great design attention is paid to catching errors early---such as fancy static type systems---so that many incorrect programs are never run.
Due to the success of these efforts, many programs are either correct or inadmissible, conserving on the need for programmer attention. As a result, most of the attention working programmers spend looking at code is spent debugging incorrect running code. Often this is code written by others and only partially understood. What properties should such code have? How can programming language design encourage incorrect programs to have those properties that facilitate debugging?
Distributed programs introduce additional difficult bugs of a different character. How should distributed language design facilitate the debugging of distributed programs?
We explain how these considerations have affected four distributed language designs (E, AmbientTalk, Joe-E/Waterken, Dr. SES) and one distributed debugging tool (Causeway).