  Quantum computing harnesses quantum laws of nature to enable new types of
algorithms, not efficiently possible on traditional computers, that may lead to
breakthroughs in crucial areas like materials science and chemistry. There is
rapidly growing demand for a quantum workforce educated in the basics of
quantum computing, in particular in quantum programming. However, there are few
offerings for non-specialists and little information on best practices for
training computer science and engineering students.
  In this report we describe our experience teaching an undergraduate course on
quantum computing using a practical, software-driven approach. We centered our
course around teaching quantum algorithms through hands-on programming,
reducing the significance of traditional written assignments and relying
instead on self-paced programming exercises ("Quantum Katas"), a variety of
programming assignments, and a final project. We observed that the programming
sections of the course helped students internalize theoretical material
presented during the lectures. In the survey results, students indicated that
the programming exercises and the final project contributed the most to their
learning process.
  We describe the motivation for centering the course around quantum
programming, discuss major artifacts used in this course, and present our
lessons learned and best practices for a future improved course offering. We
hope that our experience will help guide instructors who want to adopt a
practical approach to teaching quantum computing and will enable more
undergraduate programs to offer quantum programming as an elective.
