Programming for the Puzzled : Learn to Program While Solving Puzzles