Quantum Computing

February 2018

After Microsoft released Q#, I spent some time investigating quantum computing.
This is something that Microsoft's CEO emphasized and
was a computational technology that I had a very limited knowledge of.

In terms of actually understanding quantum computing, most of the technical documentation I have read -- such as
Microsoft's Q# documentation
or this whitepaper from IBM -- starts with such mathematical rigor that the core details slip past.
This actually makes a lot of sense to me, because quantum computing performs a very specialized speedup of certain algorithms, using a significant
amount of linear algebra. In fact, NIST has a whole page (https://math.nist.gov/quantum/zoo/) dedicated
to cataloging what those speedups are.

In a nutshell, quantum computers take in a N-bit classical input and return an N-bit classical output.
However, because of the mathematical / quantum infrastructure between the input and the output, quantum computers can perform operations quickly which normal computers cannot perform quickly.

Because quantum computing provides such a specialized performance enhancement, the majority of softare engineers will never need to know how quantum computing works.
Once we have readily-available quantum computers, most engineers will access the algorithmic speedups they perform through external APIs such as
Azure Cognitive Services, not the raw quantum computing layer itself.
Those software engineers that do need raw hardware access will either be:

- Writing an algorithm to that hasn't already been explored and enhanced
- Have a domain-specific problem that requires a new algorithm to speed up
- Be reinventing the wheel.

With all of this information then, why should software engineers investigate quantum computing now?

Personally, I feel that software engineers should know more about quantum computing so they can answer questions from their family and friends in an informed manner.
Being able to frankly and honestly answer these questions will help repair the lack of trust the public has towards computing technology.

Additionally, in a future where quantum computing is mainstream knowing the basics of quantum computing becomes similar to knowing the basics of assembly language today. The majority of software engineers do not need to know assembly language, but knowing the basics of assembly language provides us with a wealth of understanding not possible without that knowledge.

Finally, quantum computing__will__ provide algorithmic speedups to key domain-specific problems in several fields, substantially impacting global technological development.

Additionally, in a future where quantum computing is mainstream knowing the basics of quantum computing becomes similar to knowing the basics of assembly language today. The majority of software engineers do not need to know assembly language, but knowing the basics of assembly language provides us with a wealth of understanding not possible without that knowledge.

Finally, quantum computing

To learn more, I'd recommend taking a look at http://www.sci.brooklyn.cuny.edu/~noson/introQC.pdf and Q#.

Additionally, if you'd like a more mathematical introduction, see https://arxiv.org/pdf/1708.03684.pdf.

Additionally, if you'd like a more mathematical introduction, see https://arxiv.org/pdf/1708.03684.pdf.