A Hitchhikers Guide to Asynchronous Programming