In this paper we review the literature relating to the
psychological/educational study of programming. We identify general trends
comparing novice and expert programmers, programming knowledge and
strategies, program generation and comprehension, and objectoriented
versus procedural programming. (We do not cover research relating
specifically to other programming styles.) The main focus of the review is
on novice programming and topics relating to novice teaching and learning.
Various problems experienced by novices are identified, including issues
relating to basic program design, to algorithmic complexity in certain
language features, to the "fragity" of novice knowledge, and
so on. We summarise this material and suggest some practical implications
for teachers. We suggest that a key issue that emerges is the distinction
between effective and ineffective novices. What characterises effective
novices? Is it possible to identify the specific deficits of ineffective
novices and help them to become effective learners of programming?