This document discusses reactive and asynchronous programming. It begins with a brief history, noting that these concepts have been rediscovered numerous times. It then discusses how asynchronous push communication differs from synchronous pull communication. The document provides an example of decomposing synchronous code into individual asynchronous operations. It notes that error handling, timeouts, monitoring, logging, back pressure, and parallelism are missing from the example. Finally, it states that reactive programming concepts are now available in many languages and frameworks.