I. Introduction
For all but the best students an introductory programming course can prove to be a very confusing and daunting experience, especially during the first term. Programming courses are generally regarded as difficult and often have the highest drop out rates [10]. In order to succeed a novice programmer must simultaneously acquire many new skills and concepts that include, the development environment, the syntax and semantics of a programming language, an understanding of programming concepts and any paradigm specifics (such as Object Orientation). The novice must also acquire the problem solving skills and strategies that will enable them to solve programming problems in an effective way. With so many new things to learn, it is easy to see why some students struggle with the topic.