In quantum programming everything is new and, in this context, to develop quantum software we must pay attention to its most determining factors:
· Quantum computing new paradigm
· Quantum computing hardware
· Quantum programming languages
· Quantum software development kits (SDKs)
Let’s see a brief summary of the general context for quantum software development, including the most relevant characteristics of each of these elements of the new software development environment and how each of them affects the development of quantum software applications.
Quantum computing is possible thanks to the convergence of Quantum Mechanics, Mathematics, and Computer Science. The interception of these disciplines has given rise to a new computing paradigm, disruptive with respect to everything we can know about computing and software development.
Therefore, for those of us who come from classical software, this new paradigm forces us to leave the professional comfort zones in which we find ourselves and begin a very particular and exciting journey in different fields of scientific, technological and technical knowledge.
The first thing to keep in mind those interested in getting started in the development of quantum software is that, to design and develop software quantum quality it is mandatory to master the principles of quantum computing and be aware that this is a basic requirement for achieving the specific competencies required to develop quantum software.
Therefore, to work successfully in the design and development of quantum software, at a minimum, you must master the fundamentals of quantum computing , its basic concepts , and its mathematical and physical machinery :
Figure 1 Fundamentals of quantum computing
In addition to mastering the principles of quantum computing, to develop quality practical quantum software this new paradigm demands a series of scientific and technological competencies inherent to quantum computing . In our research and development projects we have verified the minimum competencies required to develop quality quantum software :
Figure 2 Necessary competencies for quantum software development
Of course, it is a whole world of new complex competencies. But, if you are one of those who want to take the first steps in quantum software programming, don’t be discouraged.
The good news is that, in our experience, the development of quality quantum software requires exquisite teamwork and for this to be possible the team must be, scientifically and technologically, polymath. In other words, that beyond the quantum culture essential for programming, as occurs in the development of classic quality software, teams are made up of different profiles, each with their specific competencies that, with an adequate organization, they make up a robust team. What we also know is that in no case is it that those who program quantum software are quantum scholars or “renaissance men.”
Undoubtedly, the level of individual requirement of these competencies will be directly proportional to the profile that is performed in the quantum development team (for example, Engineer or Programmer), to the type of quantum software that is going to be developed and, therefore of course, to the quantum computer environment for which the software will be developed.
In addition, the specific required competencies will have a greater or lesser presence, a greater or less relevance in the specific tasks to be carried out in the type of quantum software development:
Figure 3 Types of quantum software
We are dedicated to the research, development and business in the field of Quantum Software Engineering and Programming and therefore our Research Lines, our products (QPath, the First Quantum Software Development and Lifecycle Application Platform) and our practical quantum software development projects (such as QHealth) are focused on the fields of software development and quantum applications. Therefore, the content of this article is conceived from these experiences and oriented, above all, to those who are dedicated or wish to dedicate themselves to these activities both in research and in the development of real-world quantum software.
Quantum computing hardware
When we started in the field of quantum software development the other element to keep in mind in this new paradigm is quantum hardware.
There are different types of quantum computers, which differ in the processing power (number of qubits), which in one way or another limits the type of applications that can be implemented in them; There are several models of quantum computers; and, in addition, there is a great variety of physical systems for generating qubits. Of each of these elements, the ones that we consider to be the most relevant for their use in the emerging quantum industry are the following:
Figure 4 Quantum Computers
Although its development is progressing at a good pace, the reality is that quantum hardware has yet to grow and overcome its current limitations, which have an impact on the possibilities of software development.
Pay close attention to this list because, as you will see below, the types and models of quantum computers have a direct impact on the definition of the language and the quantum software development kit which we work . At least for now, each one of them is different, having requirements and characteristics that specifically solve the execution of the programmed circuits, so they are also usually applied to different types of problem solving .
Quantum programming languages
How could it be otherwise, the new paradigm of quantum computing also includes new programming languages.
As with quantum computers, there is a very wide range of programming languages in the field of quantum software development. In the following table we show what we consider the most prominent, grouped into the two main groups of quantum programming languages:
Figure 5 Quantum programming languages
Defining the quantum software development language(s) with which we will develope is not trivial, because by doing so we will be defining the scope of the type of software that we can develop, the algorithms to use, etc.
The providers have created the conditions for us to develop quantum software with their technology, but we must be aware that when we select one or the other of these languages simultaneously we will be defining the Kit for the development of quantum software that we will use.
Quantum Software Development Kits (SDKs)
Finally, the new paradigm of quantum computing also includes its new environments or kits for the development of quantum software.
As can be seen below, the number of development environments for quantum programming is also varied (normally closely linked to the types of quantum computers), which are usually presented as Kits with access to processors, Kits based on quantum simulators, or Kits with access to simulators and quantum hardware.
Figure 6 Kits for the development of quantum software
Of course, it’s totally logical for each manufacturer to develop languages and development kits for their hardware, as it is the way to guarantee that software can be programmed for them.
Both the languages and the development kits of the suppliers allow quantum programmers to develop quantum solutions, but, yes, with the disadvantage that the knowledge and competencies required for each of them are specific.
Bearing in mind the variety of quantum computing providers and the current limitations of quantum hardware, this situation places quantum software designers and programmers in the difficult task of having to learn, train and develop competencies for each of these languages and kits. And repeat the process as many times as their professional life requires them to develop a quantum solution with the most efficient quantum computer for the type of solution to be implemented.
Having to develop the same solution in another vendor’s quantum environment means starting the process all over again from scratch, not just with the programming language, but also with the development kit and even with the quantum computer. This is the equivalent of “resetting” an important part of the competencies acquired, which, without a doubt, is a waste of effort, knowledge and therefore money.
These complexities of the new computing paradigm to date weigh heavily among the reasons why the number of software engineers and programmers capable of working with these tools remains insignificant compared to the needs of the nascent quantum industry .
But, is there a way to avoid this situation and to be able to develop quantum software by abstracting from each vendor’s quantum computer and their respective languages and Quantum Software Development Kits?
Fortunately, the answer to this question is Yes, there is the possibility of developing quantum software independent of quantum technology and therefore without the need to learn multiple programming languages and development kits.
To solve this great challenge, we have carried out extensive research and development in the fields of Quantum Software Engineering and Programming whose most relevant result is QPath, the first platform for quantum applications life cycle management and development for quality quantum software. From the creation of the quantum algorithm through its development, testing and implementation, to its deployment and reuse. An ecosystem of tools to develop quantum software that supports the execution of quantum processing units in a transparent way regardless of the platform where they are executed.
On the QPath CORE page of this website we expand on these definitions and show that QPath is a fully designed platform to provide a path that makes it easier to adopt quantum technologies more quickly, freeing its users from the details of a specific quantum provider, and allowing to:
Create your quantum application assets and set your environment requirements.
Visually design quantum assets: quantum circuits, their definitions of Annealing models and compose the algorithm using flows.
Manage the life cycle automatically
Choose preferred quantum computers, scalable simulation environments, or both as execution targets. Even offering the possibility of launching -simultaneously- the same experiment in multiple destinations, consolidating the results and offering the possibility of studying them, with the advantages that this may entail.
Explore the results using a standardized unified schema whatever the execution target.
Manage all processes and analyze all stored telemetry.
To make these functionalities possible, QPath is composed of two large functional units :
CORE Modules, the core of the QuantumPath platform, capable of managing solutions independent of quantum technology assisted by general purpose tools.
The APPS Platform, which integrates with the CORE modules of the QPath system and makes it easier for development teams to manage the lifecycle of hybrid software projects.
Then we will show how this statement is fulfilled, focusing only on the functionalities of the CORE Modules that make it possible.
Introduction to Quantum Software Development with QuantumPath
When you start working with QPath, instead of having to worry about defining the details of certain SDKs to be deployed (QISKIT, Ocean …), the language and the environment with which we are going to program (direct Python, Q#, …, Jupyter notebook, …) and generate the necessary files along with where to keep them (local disk, http repository, github …), we use the concept of solution to create the “box” where we will store our assets.
The Solution, among others, already has the responsibility of connecting the different available quantum platforms (considering the corresponding SDK, their requirements, and their different versions) to the assets that we generate with QPath. This allows, among other things, to limit certain quantum technologies to the context of the problem and to license them. In addition, from the beginning we can determine to use the path of quantum gate technologies or annealing technologies, for example:
Figure 7 Solution management
Associated with the solution, we will add, edit and manage the quantum assets with which we will solve a certain problem.
Figure 8 Different types of assets
These assets currently -and mainly- can be Circuits and Flows.
Circuits allow us to conceptualize the quantum circuit. And although in QPath this is defined with a “metalanguage”, the platform allows the graphic design of the quantum circuit and its information persists in the system in a transparent way. In this way, we only care about the asset and not all the underlying elements that depend on it. The design of the Circuit will depend on the type of technology we want to work with (Gate-based or Annealing), and the designer will react to it with the most appropriate design tool. If, for example, we want to make a quantum gate circuit with which to test the principle of quantum entanglement, in QPath we would have something like this:
Figure 9 Circuit Definition
Figure 10 Definition of a circuit
Figure 11 Graphic design of a circuit quantum gates
As with a classical solution, we can take the Circuits as components that need to be orchestrated in an application where there can be multiple steps. In order to have an application in which to launch our Circuit -or the circuits that we are building-, we will need to define a Flow.
The Flow has the responsibility of coordinating the way in which they will be executed and coordinating, the Circuits and all the elements that QPath will provide. In the case of our entanglement example, a flow would be:
Figure 12 Flow Definition
Figure 13 Editing and designing a flow
Once this work has been completed, we will be in a position to carry out the experiments. For this, QPath provides the execution dashboard. From this functionality, it will be possible to coordinate the necessary executions and check the results, being possible, as mentioned previously, to be able to select with great flexibility the execution destination within those associated with the solution: real quantum machine, quantum simulator or both or all the available ones.
The QPath CORE, through its process manager, will be responsible for carrying out all the necessary actions to respond to the user’s needs and provide the different consolidated results.
It is important to note at this point that all launching of experiments is totally asynchronous, bearing in mind that, depending on the response capacity of a real quantum machine, the level of license available and its queue of requests in progress (which can be hundreds and thousands of experiments globally), it can take hours (or even days) to collect a response.
QPath simplifies the democratization of access to quantum computers. Its multi-target delivery skills and telemetry learning can make target selection spread the load by delivering results as quickly as possible and benefiting the overall environment. Its capability to allow the refinement of assets and to launch them previously against local / distributed simulators also benefits not to overload a real machine in continuous experimentation and can even positively influence the economics of the execution of projects in their development phase. Leaving those possibilities open until the end of the development.
Additionally, the fact that the execution data is stored effortless in the system, allows the results to be consulted later without the need to run the experiment again, avoiding overloading the available machines.
Figure 14 Execution scorecard
Once the executions are carried out and received in the system, the results obtained from each destination can be observed in a standardized way and their telemetries can be further analyzed. As well as curious details of how a real NISQ (Noisy Intermediate-Scale Quantum) computer may be injecting errors into the execution by presenting values that should not appear in the entanglement experiment carried out. This is something that does not happen, for example, in simulators (both local and remote).
We consider it reasonable to insist that the results are stored in the project, without effort by the user. So, it is possible to consult them as many times as necessary without having to rerun the experiment.
And all this is possible to do in the shortest time. Focusing on the experiment and not on all the necessary elements that should be built on each platform.
Of course, the user can continue to expand their catalog of circuits and refactor the existing ones to improve their solution, while either maintaining the flow already finished or refactoring it to expand its algorithm or complexity. All within a controlled environment.
To end this introduction to what QPath offers, it is worth noting that not “only” an environment is provided to manage the life cycle of a quantum solution, but also the services and interfaces to exploit the data from applications of third parties.
Although this is not the objective of this article, it should be noted that from the perspective of practical quantum software it is very important to bear in mind whether, as part of the life cycle, quantum solutions are being conceived for the real world and that these will be exploited by classical systems, composing a hybrid architecture. On this system architecture pattern, any flow in QPath can be exposed as a service to the outside, so that hybrid solutions can be built quickly.
An example of the above is to show a Windows FORM application developed with Q#, in which the elements that QPath provides to the outside can be observed and how the data of our experiment can be accessed from a hybrid solution.
Figure 15 An example of a hybrid application that accesses QPath’s quantum assets
In summary, as we have shown and illustrated with screenshots of the Platform, QPath makes possible the design and construction of quantum solutions focusing on the problem and making it possible for multidisciplinary teams to work together using high-level tools abstracting the inherent complications of manufacturers and their tools. At the same time, it provides a series of tools at different levels that will make quantum development a new process ready for business.
Finally, we highlight that QPath has been developed bearing in mind the principles of the Talavera Manifesto , therefore:
· It is agnostic about quantum programming languages and technologies.
· It adopts the coexistence of classical and quantum computing, facilitating their integration.
· It supports the management of quantum software development projects.
· It supports the evolution of quantum software.
· It makes it easy to deliver quantum programs with zero defects.
· It assures the quality of quantum software.
· It supports reuse of quantum software.
· It addresses security and privacy by design.
· It encompasses software government and management.
For all these reasons (and for some other reasons that we will be presenting in other articles), QPath is an excellent Platform for the development of quality practical quantum software, which integrates transparently with quantum computers from the main providers and frees us from having to know and manage the specific complexities of each of those quantum environments.
 Hevia, José Luis. aQuantum Webinar: Introduction to Quantum Development (in Spanish). https://www.youtube.com/watch?v=V44qdI4rl3c&t=173s, aQuantum, 2020; Introduction to Quantum Development, http://ceur-ws.org/Vol-2561/paper3.pdf. 2020.
 Serrano, Manuel Angel. aQuantum Webinar: Quantum Concepts. https://www.youtube.com/channel/UCrhjVcvHCKI79pjZ6R2ybbA. 2020
 Murina, Ezequiel. aQuantum Webinar: Quantum Programming the Mathematical and Physics Machinery (in Spanish). https://www.youtube.com/channel/UCrhjVcvHCKI79pjZ6R2ybbA. 2020
 Piattini, Mario. aQuantum Webinar: Necessary competences for quantum software development (in Spanish). https://www.youtube.com/watch?v=oDjzUiYOpnk. 2020
 Peterssen Nodarse, Guido. aQuantum Webinar: Quantum technology impact the necessary workforce for developing quantum software (in Spanish). https://www.youtube.com/watch?v=2xoX-FWzgIs&t=6s. 2020
 An updated list of quantum computers, quantum programming languages and quantum SDKs, with a brief description of their characteristics, can be
consulted at https://en.wikipedia.org/wiki/Quantum_programming#Imperative_languages
 Hevia, José Luis. Requirements for Quantum Software Platforms. http://ceur-ws.org/Vol-2705/short3.pdf. 2020
 Peterssen, Guido. Quantum technology impact: the necessary workforce for developing quantum software. http://ceur-ws.org/Vol-2561/paper1.pdf. 2020
 Hevia, José Luis. QPath Features. The QPath Blog. https://www.quantumpath.es/index.php/2020/12/10/qpath_features/. 2020
 The Talavera Manifesto for Quantum Software Engineering and Programming. http://ceur-ws.org/Vol-2561/paper0.pdf. 2020