Will Quantum Technology change the world of Software Engineering completely?
Let’s start by saying that I am no expert in the field of Quantum technology. I am just very interested in what the possible impact of this shift in technology will be in our field of Software Engineering.
If you would like to know more about the basics of Quantum technology, I highly recommend checking out the website of the QuTech Academy for further reading.
In this blog I am sharing my thoughts on how Quantum Technology can impact the world of Software engineering and hopefully inspire you to think about the possibilities that lie ahead.
When we look at our world of Software engineering we can easily break it down into three categories:
In this blog I will focus mainly on the compute topic and how Quantum technology could impact it at some point in time.
This is the most interesting area from a developer perspective and could affect our software and way of working the most. To understand what could be the impact of Quantum Computing we first need to identify what kind of problems Quantum computing solves that classical computers can’t.
To understand what problems can be solved we first need to look at “Problem classification”. This is a subject on it’s own and can spread multiple blogs to explain, so I will reference the excellent article on this topic by Sara A. Metwali Complexity theory 101.
Problems that require resources that scale exponentially with the size of the problem are hard or nearly impossible to solve with classical computers. This is the area where Quantum computers will provide the greatest benefit. So what kind of real life problems could we be talking about here.
The core of the mainstream encryption methods like RSA encryption is based on factoring a product of two prime numbers. Classical computers - even at an extremely large scale - can find the right pair but this can take an insane amount of time. Quantum computers can use algorithms like Shor’s algorithm and solve the problem quickly, depending on the amount of qubits used. While writing this blog the Dutch AIVD (General Intelligence and Security Service of the Netherlands) released a brochure on the threat Quantum computers pose on current cryptography methods. Their experts say that although the chances are slim, Quantum Computers by 2030 are powerful enough to break the current encryption standards and some are nowadays considered insecure as listed in this article.
Post-quantum cryptography (PQC) is the next generation of security that is “ready” for Quantum compute power. PQC refers to cryptographic algorithms (usually public-key algorithms) that are thought to be secure against attacks by quantum computers.
Although the main focus in this blog is on the compute side there is also massive development on the network area within the security domain. Quantum Key Distribution (QKD) is the best-known Quantum encryption. Quantum key distribution is a secure communication method for exchanging encryption keys only known to sharing parties. This communication method uses properties found in quantum physics to exchange cryptographic keys in a way that is provable and guarantees security.
Where PQC implementations will mostly be software-only implementations, QKD will require specialized hardware.
Medical and biological research is very complex. This is because molecules and interactions between molecules are very time-consuming to model and to simulate. Quantum computers make the simulation of biological systems easy even with small amounts of qubits. If you want to know the insides of the benefits Quantum technology can offer in the field of biological sciences please read this paper.
The most appealing use case, in my opinion, is the advantage that Quantum computing can bring for optimizing current challenges like route optimizations, speech and image recognition. Classical computers can solve these issues by using brute force, but Quantum computers offer a level of parallelism to check all answers at the same time to solve the issue much more efficiently. This is also the case with analyzing large amounts of data and complex datasets. Where classical computers won’t be able to filter the actual value from the noise, Quantum computers can complete this in seconds. This is very good news because the amount and complexity of data will grow exponentially in the coming years. Quantum Software Architecture So if we find a problem within our application that scales exponentially, it is highly suitable to be solved by Quantum Technology. How can we then develop our software for it? This is where the uncertainty starts. Hardware for Quantum Computers is still experimental and will not be widely available for some time. However, there are options out there since the approach for writing quantum software is pretty clear:
Code and run it yourself
Use Quantum cloud offerings
Code and run it yourself
As a Java developer there is a starting point for your Java Quantum projects: “Strange”. Strange is a Quantum Computing API for Java with Johan Vos as its main contributor. Please use this API and the additional examples created by Johan to help you create your own Quantum programs and execute them on the Open Source Java Quantum Computer Simulator also provided by Strange.
Use Quantum cloud offering
There are a lot of offerings out there, most of them consist of a toolsuite for Quantum Computing containing a Programming language, development tools, simulators and example algorithms. As always, Wikipedia offers a nice overview of the solutions out there with a short description and distinction between the various platforms.
One platform that has not been mentioned yet on Wikipedia is QCI’s Qatalyst. This platform allows an end user to describe their problem at a high level as a constrained optimization problem and not worry about the complexities of learning how to program a quantum computer. Qatalyst has recently been added to Amazon Web Services (AWS) as a Software as a Service (SaaS) offering. It can be used with classical computers using classical algorithms or it can be run on quantum computers from D-Wave, Rigetti, and IonQ through Amazon’s Braket.
Architecture is key
In order to prepare our applications for the use of Quantum Technology the architecture of your application is very important. You want to be able to run parts of your application on classical computers and some or maybe just one part or service on a Quantum computer. Although it may take many years before quantum computers are widely available, simulators can be used now to work on Quantum software. As Software Engineers we know it also takes time to change systems and have them using different technologies. So starting early makes the transition more seamless.
My colleague Jasper Bogers wrote an excellent article (in Dutch) about the use of Hexagonal Architecture. This architectural pattern promotes the Separation of Concerns by encapsulating logic in different components of the application. This enables a higher level of isolation, testability and control over your business specific code. Each component of the application has a strict set of responsibilities and requirements. This creates clear boundaries as to where certain logic or functionality should be implemented, and how those components should interact with each other. The picture below shows such an architecture and how this utilizes both Quantum and classical compute power.
So in the case of a ‘Hybrid’ application with components that require to be executed on a classical computer and components that benefit from Quantum compute power, this architecture provides you the means to do so. There are many use cases out there but, like I discussed before, the logistic problems are for some reason more appealing to me. What if we could utilize the optimization algorithms and assign routes more efficiently. This could have a massive impact on the travel and logistic companies out there. A recent study at Chalmers University of Technology in Sweden proves this on a small Quantum computer.
Looking at Quantum Technology and Software Engineering, we are at the dawn of a new era where the revolution is mainly focussed on the hardware side of the picture. However, without real world problems to solve - and good software to solve it with - the puzzle is only partially complete.
All of my latest blogs featured quotes of one of my childhood heroes, Michael Jordan. Scrolling through his wisdom quotes I found this one highly suitable for where we currently stand and how I feel about Quantum Technology.
I hope that we as Software Engineers will get more involved in this revolution and help to find the right pieces to the puzzle. We can shape the future by making programming for Quantum Software less complex without losing its power.