An analysis of patterns of debugging among novice computer science students