Learning a complex skill such as programming requires the development and use of conceptual models, both of the concepts in the programming language, and the 'behaviour' of the machine. The latter has been referred to as the 'notional machine' (du Boulay, B., O'Shea, T. and Monk, 1981). Such a conceptual model, however, must Interact and build upon models and metaphors which students already have. It is these metaphors and some techniques for studying them which are discussed in this paper.