Abstract

Software engineering is one of the most complex scientific activities humanity has developed. It is estimated there were nearly 23 million software developers in the world at the beginning of 2018: 11.65 million full-time developers, 6.35 million part-time developers, and 4.30 million nonprofessional developers. It is also estimated there are approximately 1 million physicists and 50 thousand quantum physicists in the world. Quantum Computing requires the most advanced, dynamic ideas from both areas. Over the past 18 years we have worked on innumerable software projects, and discovered that highly skilled software engineers are rare, and, for every case we reviewed, their understanding of Quantum Physics is infinitesimal. With this realization, our goal was to develop a comprehensive system that minimizes the learning curve of Quantum Computing programming by reducing the amount of Quantum theory knowledge required to program Quantum Computers, and maximizing the reusability of current software developing patterns and practices to exponentially increase short-term productivity.

 

Introduction

The current software for Quantum Computers is based on programming QuBits and applying operations on them. Defining and writing Quantum Computing algorithms requires having the knowledge of Quantum physics’ theory and using this theory to develop solutions for specific problems. Our main question was how can we use and improve the current software development practices, developed in the last 40 years, to define a framework for Quantum Computing development? A framework that not only has a shorter learning curve but also provides a way to exponentially accelerate the production of Quantum Computer software.

We will go over the current programming tools we considered important to be re-used in the creation of a new environment for Quantum Computing programming, given that they are presently understood by any senior software engineer/computer scientist.

Current general programming tools and techniques

Quantum and Quantum Programming 

We also considered the following concepts to understand the programming of Quantum Computers

 

Requirements for a new Framework

The review and analysis of each technology and theory, along with the relation between each other, are outside of the scope of this document. The following list compiles the most important concepts to take into account during the definition of a new framework, that will speed up the software development for Quantum Computers.

 

Proposed new Framework

Universal Programming Technique 

The core of the framework (and the most challenging development) is the definition of a standard method to write software to solve any kind of computing problems.  

High Level Language for Quantum Computing

Programming algorithms, using QuBits and quantum registers, is similar to programming in Assembly for classical computers using bits and registers, an activity that is time and resource intensive. We will abstract as much as possible to tackle the complexity. Code generation and compilation will be used as a main tool to minimize coding responsibly and errors.

Quantum Software Libraries

Building software for Quantum Computers requires as much or, in some applications, even more effort and attention than is needed to build the Quantum Computer hardware. We propose to organize the software into suites of well-tested libraries, establishing a solid technical maturity from day zero, using new patterns.

Quantum Testing Kit

We believe the process of writing new complex software requires continuous testing, a new and proper testing environment, with tools for validating the code in a timely manner, running tests executions, using a dedicated Quantum Simulator server for the initial pass and a physical Quantum Computer for the final testing step.

Deployment and Integration

The last step is to have an automated, reliable way to place the new system into a production environment. Interaction with databases and existing services will be accomplished by using data definitions included in the coding step (using the provided high level language) to generate web APIs with their corresponding versioning. 

Proposed Infrastructure

 

Leave a Reply

Your email address will not be published. Required fields are marked *