This document discusses distributed computing and some of its implications. It begins by introducing concepts like network programming, mobile programming, and component-based programming that arise from relaxing the rules of object-oriented programming to allow objects to reside on different machines. The document then focuses on client-server computing, describing how Java simplifies building client-server systems through libraries for addressing, ports, sockets, and streams. It also discusses general servers that can accept connections from many clients simultaneously and object serialization for transferring objects across networks.