  Background: Programming skills are advantageous to navigate today's society,
so it is important to teach them to students. However, failure rates for
programming courses are high, and especially students who fall behind early in
introductory programming courses tend to stay behind. Objective: To catch these
students as early as possible, we aim to develop an early warning system, so we
can offer the students support, for example, in the form of syntax
drill-and-practice exercises. Method: To develop the early warning system, we
assess different cognitive skills of students of an introductory programming
course. On several points in time over the course, students complete tests that
measure their ability to develop a mental model of programming, language
skills, attention, and fluid intelligence. Then, we evaluated to what extent
these skills predict whether students acquire programming skills. Additionally,
we assess how syntax drill-and-practice exercises improve how students acquire
programming skill. Findings: Most of the cognitive skills can predict whether
students acquire programming skills to a certain degree. Especially the ability
to develop an early mental model of programming and language skills appear to
be relevant. Fluid intelligence also shows predictive power, but appears to be
comparable with the ability to develop a mental model. Furthermore, we found a
significant positive effect of the syntax drill-and-practice exercises on the
success of a course. Implications: Our first suggestion of an early warning
system consists of few, easy-to-apply tests that can be integrated in
programming courses or applied even before a course starts. Thus, with the
start of a programming course, students who are at high risk of failing can be
identified and offered support, for example, in the form of syntax
drill-and-practice exercises to help students to develop programming skills.
