# Quantum Computing Software and Programming

### - Overview

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.

**- 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 ...]**