  Quantum algorithms have the potential to provide exponential speedups over
some of the best known classical algorithms. These speedups may enable quantum
devices to solve currently intractable problems such as those in the fields of
optimization, material science, chemistry, and biology. Thus, the realization
of large-scale, reliable quantum-computers will likely have a significant
impact on the world. For this reason, the focus of this dissertation is on the
development of quantum-computing applications and robust, scalable
quantum-architectures. I begin by presenting an overview of the language of
quantum computation. I then, in joint work with Ojas Parekh, analyze the
performance of the quantum approximate optimization algorithm (QAOA) on a graph
problem called Max Cut. Next, I present a new stabilizer simulation algorithm
that gives improved runtime performance for topological stabilizer codes. After
that, in joint work with Andrew Landahl, I present a new set of procedures for
performing logical operations called "color-code lattice-surgery." Finally, I
describe a software package I developed for studying, developing, and
evaluating quantum error-correcting codes under realistic noise.
