  It is conjectured that quantum computers are able to solve certain problems
more quickly than any deterministic or probabilistic computer. A quantum
computer exploits the rules of quantum mechanics to speed up computations.
However, it is a formidable task to build a quantum computer, since the quantum
mechanical systems storing the information unavoidably interact with their
environment. Therefore, one has to mitigate the resulting noise and decoherence
effects to avoid computational errors.
  In this work, I study various aspects of quantum error control codes -- the
key component of fault-tolerant quantum information processing. I present the
fundamental theory and necessary background of quantum codes and construct many
families of quantum block and convolutional codes over finite fields, in
addition to families of subsystem codes over symmetric and asymmetric channels.
  Particularly, many families of quantum BCH, RS, duadic, and convolutional
codes are constructed over finite fields. Families of subsystem codes and a
class of optimal MDS subsystem codes are derived over asymmetric and symmetric
quantum channels. In addition, propagation rules and tables of upper bounds on
subsystem code parameters are established. Classes of quantum and classical
LDPC codes based on finite geometries and Latin squares are constructed.
