Quantum Information Processing and Quantum Error Correction: An Engineering Approach