Algorithmic Methods in Non-Commutative Algebra