Quantum computers are able to operate on coherent superpositions of states, and to isolate a single global property of the set of computed quantities via interference. In principle, this permits them to solve certain problems exponentially faster thana classical computer, but not one has yet succeeded in implementing a true quantum computer on more than two quantum bits. Recently, however, it has been found that an ensemble of independent and identical quantum computers can perform mots of the same feats than a single quantum computer could, while at the same time bringing massive classical parallelism to bear on its computations. Such an ensemble quantum computer can be realized, to a limited extent, by nuclear magnetic resonance (NMR) spectroscopy on ordinary liquids at room temperature and pressure. This simple implementation depends on special kinds of mixed states, called pseudo-pure states, whose preparation entails a loss of signal that is exponential in the number of spins. While this would appear to limit such an implementation to ca. 8-10 spins in the foreseeable future, NMR spectroscopy has now permitted the first experimental demonstrations of all the basic features of quantum computing. We claim, moreover, that the product operator formalism, on which the theory of NM R spectroscopy is based, provides an efficient framework within which to analyze algorithms and decoherence effects in quantum computing more generally. This is illustrated by presenting our recent experimentally implementation of a quantum error correcting code.