In this paper, an explanatory program understander that can analyse st
udent solutions for programming assignments is described, The approach
uses a number of reverse engineering techniques and is grounded on a
cognitive model of procedural programming knowledge. It will be shown
that, through the use of reverse engineering techniques, a lot of feed
back (e.g. on errors) can be generated without having to use any prior
knowledge on what the program is supposed to do. When such informatio
n is available, problem-specific feedback can also be generated. Furth
ermore, the use of the cognitive programming concepts allows one to sp
ecify the errors in an understandable way using exactly the same words
and concepts as human programmers. This opens interesting possibiliti
es for other uses of the proposed program understanding technique desc
ribed in this article.