Teaching UML Skills to Novice Programmers Using a Sample Solution Based Intelligent Tutoring System