Quantum Algorithms And Programming