What is the difference between synchronous and asynchronous programming, and when should you use async/await?