Programming and Algorithms: An Introduction