It is an exciting time for quantum computing where prototypes of early-stage quantum computers are becoming available at your fingertips through clouds. Conventional computer science study of quantum computing has been focusing on its algorithm and complexity perspective. While providing insights into the power and limits of quantum computing in the asymptotic regime, this kind of theoretical study is insufficient to capture the opportunities and restrictions of realistic quantum machines or to address the challenges in building efficient and reliable systems that operate them. To fill in this gap, my group has been contributing to the foundation of end-to-end quantum applications by integrating ideas from theory, machine learning, programming languages, and systems. In particular, I will talk about how quantum computing could help optimization and machine learning tasks, and how we help programmers write more efficient and reliable quantum software. I will also mention my recent efforts in the design of applications and toolchains for analog quantum machines, which are more realistic and powerful types of quantum devices in the near future.