From problem to program: a self paced tutorial for introductory programming