  Quantum computing is no longer only a scientific interest but is rapidly
becoming an industrially available technology that can potentially overcome the
limits of classical computation. Over the last years, all major companies have
provided frameworks and programming languages that allow developers to create
their quantum applications. This shift has led to the definition of a new
discipline called quantum software engineering, which is demanded to define
novel methods for engineering large-scale quantum applications. While the
research community is successfully embracing this call, we notice a lack of
systematic investigations into the state of the practice of quantum
programming. Understanding the challenges that quantum developers face is vital
to precisely define the aims of quantum software engineering. Hence, in this
paper, we first mine all the GitHub repositories that make use of the most used
quantum programming frameworks currently on the market and then conduct coding
analysis sessions to produce a taxonomy of the purposes for which quantum
technologies are used. In the second place, we conduct a survey study that
involves the contributors of the considered repositories, which aims to elicit
the developers' opinions on the current adoption and challenges of quantum
programming. On the one hand, the results highlight that the current adoption
of quantum programming is still limited. On the other hand, there are many
challenges that the software engineering community should carefully consider:
these do not strictly pertain to technical concerns but also socio-technical
matters.
