Bridging the practical coding gap for engineering graduates