pays special attention to develop reading and understanding skills. In fact, that is sufficient for passing it, according to the grading model. The second category is meant as writing code in a well-defined context.

Consequently with this decision, we want to understand it as providing well-defined specifications referring to a domain fully understood by the learner. This should include the appropriate class structure, the signatures and finally the methods should be kept small. So that focus is set as much as possible on expressing well-known concepts at the local (method) level. We want to add, following [15] among others, that *templates* should be initially used so that the process *Apply* can be incrementally evolved into *Analyze*.

Focusing on reading and understanding offers some benefits by the elaboration of exercises because questions forces the student to solve problems without being able to run code on a machine. The author strongly exploits this by using Multiple Choice Questions (MCQ) as a testing technique. For instance, example in Figure 5.2 in [31] exercises on iterations over arrays.

The exercise design intentionally contains distractors to test misconceptions, as the author explains. In contrast with the exercise shown in Figure 1 the intended function is specified, however. Interesting questions remain how to adapt such a kind of exercise in a interactive eLearning environment according to our requirements. We will discuss this, in the second part of this work.

public static int maxPos(int[] y, int first, int last){
/* **Returns the position of the maximun element in the**
* **subsection of the array "y", starting at position "first"** * **ending at position "last".** */
int bestSoFar = first;
*** missing code goes here ***
} Which of the following is the missing code from "maxPos"?

(a) for(int i=last;i>first;i--)
if(y[i] < y[bestSoFar])
bestSoFar=i;
(b) for(int i=first+1;i<=last;i--)
if(y[i] < y[bestSoFar])
bestSoFar=i;
(c) for(int i=last;i>first;i--)
if(y[i] < bestSoFar)
bestSoFar=i;
(d) for(int i=last;i>first;i--)
if(y[i] > y[bestSoFar])
bestSoFar=i;
(e) for(int i=first+1;i<=last;i--)
if(y[i] > y[bestSoFar])
bestSoFar=i; Figure 4: MCQ Exercise on Reading and Understanding in [31]