Graining and filling understanding gaps for novice programmers | IEEE Conference Publication | IEEE Xplore