How do machines share information in distributed computing in a matter so that it's efficient? Do they have to customize the software for each problem?