Students' difficulties in learning computer programming are well documented in the literature and have been studied from different perspectives by the researchers. However, studies that have been conducted from the meta-cognition perspective are rare in the context of programming education. The current study aimed to (i) investigate the effects of a specific metacognitive training on students' programming achievement, retention of programming knowledge, and meta-cognitive awareness; and (ii) explore students' experiences and opinions related to the meta-cognitive training. There were 51 participants (28 male and 23 female) who are 2nd-year students from a public university. In the current study, a mixed methods design, specifically embedded experimental model, was utilized. The experimental group was instructed using the meta-cognitive training, and the control group was taught using traditional instruction. An achievement test, a meta-cognitive awareness inventory, and semi-structured interviews were used to collect data. The results of the study indicated that the intervention based on meta-cognition caused significantly better acquisition of introductory programming concepts. Although there was no significant difference between experimental and control groups in terms of meta-cognitive awareness, qualitative data implied some differences related to students' problem-solving ways and meta-cognitive strategies. Results of retention and post tests revealed that scores of students in experimental and control groups declined at close rates. Moreover, most of the students in the experimental group reported positive feelings toward meta-cognitive instruction. Thus, it might be said that meta-cognitive training was an effective tool to improve students' understanding of introductory programming topics as indicated by post-test scores.