  Automated tutoring systems offer the flexibility and scalability necessary to
facilitate the provision of high quality and universally accessible programming
education. In order to realise the full potential of these systems, recent work
has proposed a diverse range of techniques for automatically generating hints
to assist students with programming exercises. This paper integrates these
apparently disparate approaches into a coherent whole. Specifically, it
emphasises that all hint techniques can be understood as a series of simpler
components with similar properties. Using this insight, it presents a simple
framework for describing such techniques, the Hint Iteration by Narrow-down and
Transformation Steps (HINTS) framework, and it surveys recent work in the
context of this framework. It discusses important implications of the survey
and framework, including the need to further develop evaluation methods and the
importance of considering hint technique components when designing,
communicating and evaluating hint systems. Ultimately, this paper is designed
to facilitate future opportunities for the development, extension and
comparison of automated programming hint techniques in order to maximise their
educational potential.
