This study explored the use of self-assessments, journaling, and peer sharing in an online computer programming course. We conducted an experiment using a pretest-intervention-posttest design in which 64 undergraduate first-year students participated. We aimed to investigate whether self-assessment, journaling, and peer sharing can facilitate students' learning. Moreover, we examined how the research variables related to each other and to learning achievement. Therefore, after the experiment, (1) prior knowledge, learning performance, and achievement were assessed, (2) online logs representing learning behaviors were analyzed, and (3) students were interviewed. Results demonstrated that self-assessment, journaling, and peer sharing effectively facilitated learning and students' cognition regulation strategies. Namely, keeping a learning journal enabled students to summarize key concepts, elaborate ideas, and reflect on learning material; self-assessment allowed students to reflect on their understanding of the material under study; and peer sharing enabled students to study peers' learning journals and self-assessments to improve their own. Although self-assessment, journaling, and peer sharing significantly correlated with each other and with learning achievement, results showed that keeping a learning journal had the strongest effect on learning achievement. Moreover, self-assessment and keeping a learning journal complemented each other and combining the two resulted in even higher learning achievement scores. The findings suggest that the use of self-assessment, journaling, and peer sharing show promise to facilitate learning from an online course.