What is Async Programming, and Why Should You Care?