# Quantum Computing Software and Programming

### - Overview

Interest in quantum computing has grown over the past few years and months. New reports on breakthroughs in this field are regularly published by research institutes, companies or governments.

Meanwhile, articles with less technical background talk about the potential consequences of quantum computing, from breaking most current encryption, to solving all diseases, to accomplishing general artificial intelligence. Not all expectations are equally realistic, though.

As a realistic, down-to-earth software developer, you might wonder where the line between fact and fiction lies, and how quantum computing will impact future software development.

Quantum computing represents a new computing paradigm that utilizes the fundamental principles of quantum mechanics to perform calculations. The promise of quantum computing lies in the possibility to efficiently perform a few tasks, such as prime factorization, quantum simulation, search, optimization, and algebraic procedures (such as machine learning); even the largest classical computers have computational power beyond their capabilities.

The power of quantum computing rests on two cornerstones of quantum mechanics, interference and entanglement, which highlight the wave and particle aspects of quantum computing, respectively.

**- The Quantum Internet**

Today’s internet connects us globally. It sends packets of information that carry our communications in classical signals -- sent by bursts of light through optical fibers, electrically through copper wire, or by microwaves to make wireless connections.

It is fast and reliable. So why develop a quantum internet that uses single photons -- the smallest possible quantum of light -- to carry information instead?

Because there are new scientific domains to explore. Quantum physics governs the domain of the very small. It allows us to understand – and use to our advantage – uniquely quantum phenomena for which there is no classical counterpart.

We can use the principles of quantum physics to design sensors that make more precise measurements, computers that simulate more complex physical processes, and communication networks that securely interconnect these devices and create new opportunities for scientific discovery.

A quantum machine could one day drive big advances in areas like AI and make even the most powerful supercomputers look like toys.

**- Quantum Programming**

Quantum programming is the process of assembling a sequence of instructions, called quantum programs, capable of running on a quantum computer. Quantum programming languages facilitate the use of high-level constructs to express quantum algorithms. The field is deeply rooted in the idea of open source, so most quantum software is freely available as open source software.

The Quantum Software Development Kit (SDK) provides a collection of tools for creating and manipulating quantum programs. They also provide a way to simulate quantum programs or prepare to run them using cloud-based quantum devices.

**- Quantum Algorithms**

An algorithm is essentially a series of steps to solve a problem. However, these steps are limited by the hardware on which the algorithm is run.

For example, suppose we have written down the steps required to find the derivative of a polynomial function. If we give these instructions to mathematicians, they will easily get the correct answer because they know calculus.

If we give these instructions to students who are studying calculus, they will also be able to come up with the correct answer, but it may take more time as they have very little experience/knowledge required.

But if we give these instructions to kindergarten children, they will be very lost and won't get answers. There may be only graffiti on the page.

In this example, the steps of computing derivatives represent an algorithm, and different people using them represent different degrees of computing software. Just as less and less is known about physics, the steps to be performed in the above analogy will become less efficient, as will computer algorithms.

Certain algorithms take much longer on classical computers that obey the laws of macroscopic physics, because their hardware may not be able to perform certain steps efficiently.

These algorithms are called quantum algorithms, and they can only run on quantum computers because quantum computers are built in fundamentally different ways than classical computers.

### - Qiskit Open-Source SDK

Qiskit [kiss-kit] (https://qiskit.org/) is an open-source software development kit (SDK) for working with quantum computers at the circuit, pulse, and algorithm levels.

It provides tools for creating and manipulating quantum programs and running them on a prototype quantum device on the IBM Quantum Experience or a simulator on a local computer.

It follows the circuit model of general quantum computing and can be used with any quantum hardware that follows this model (currently supports superconducting qubits and trapped ions).

Qiskit was founded by IBM Research to develop software for its cloud quantum computing service, IBM Quantum Experience. External supporters also contributed, often from academic institutions.

**[More to come ...]**