Michael F. Collins gave a presentation about different ways for programs to communicate and collaborate. He discussed parent-child processes where a parent process spawns a child process and they communicate through standard input/output streams. He also covered distributed processes using various protocols like SOAP, REST, and Thrift. Additionally, he explained asynchronous messaging where programs communicate by sending one-way messages via a broker.