SoftwareProjects - 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.

Overview

There has already been a wealth of information written about what Quantum Computing can and cannot do -- a well-grounded article can be found here, with a small (understandable) demo here.


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.


Career Applicability

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.
In particular, frontend engineers will never have to deal with quantum computing, and most backend engineers (unless they have specific algorithms to enhance) won't deal with quantum computing either. For the forseeable future (where quantum computers are expensive to use), most data-heavy applications also won't involve quantum computing due to the limited input / output rate of these devices.


Learning More

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.

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.