For computation intensive computations, or applications with heterogeneous components, partitioning the application over a group of computer systems connected by a network is an attractive solution. Unfortunately, programmers who want to do ``network computing'' face several challenges. First, the network and attached systems are shared resources, whose behavior is unpredictable. This makes it very difficult to parallelize applications effectively. Moreover, network communication primitives are often hard to use. We implemented a programming environment that addresses these problems. It provides simple and efficient communication primitives, and an efficient monitoring kernel allowing both programmers and programming tools to keep track of changes in the dynamic network environment. We implemented the environment in the context of the Nectar project. The high performance of the Nectar net makes it an attractive system for a large class of applications, and it also creates new opportunities for monitoring and debugging. We found that low-overhead, low-latency communication are particularly important. The Nectar system and programming environment are used by several application groups on a daily basis.