When working as a developer, it helps to have the right tool for the right job—and quantum computing is no exception. Quantum computing software stacks tend to be pretty diverse. In part 2, we expand our stack to include Q#, a domain-specific programming language for working with quantum devices. Just as domain-specific languages can help with specialized classical hardware like GPUs and FPGA, Q# helps us get the most out of quantum computing by providing the right tools to implement and apply quantum algorithms. As with other specialized languages, Q# works great when interoperating alongside more general-purpose languages and platforms like Python and .NET.
With all that in mind, we start Q-sharpening our skills and learning the basics of writing quantum algorithms. In chapter 7, we revisit quantum random number generators to learn the basics of the Q# language, building on the skills we developed in chapter 2. Next, in chapter 8, we expand our toolbox of quantum programming techniques by learning about phase kickback, oracles, and other new tricks, and we use them to play some fun new games. Finally, in chapter 9, we learn about the phase-estimation technique, building the skills we will need as we start working on more applied problems in part 3.