Learning to program is hard. In this paper we investigate the use of metacognitive techniques to help students in an introductory programming course. Metacognition is an important ingredient to learning. We focus on metacognitive calibration, a learner's ability to assess their own understanding. We do this in an innovative blended learning environment used in two instances of a second-semester undergraduate programming course, using two vastly different pedagogical approaches. We collect traces of self-assessment and help seeking behaviors and analyze them to better understand the metacognitive tactics and their relation to programming student performance.