Teaching programming to first year undergraduates in large numbers is challenging. Currently, online supported learning is becoming more dominant, even on face-to-face courses, and this trend will increase in the future. This paper uses activity theory (AT) to analyse the use of tools to support learning. Data collection took place during 2008Á2010 at Kingston University and involves over one hundred responses. This has been analysed into activity systems offering a detailed analysis of the use of a number of tools being used (in AT these include physical tools, such as technologies including books, and non-physical tools, such as conversation). When teaching programming to large numbers of students it is difficult to offer one-to-one attention and the reliance on such tools becomes more important. For example, in student responses a good integrated development environment (IDE) is shown to make learning easier and more enjoyable, whereas a bad IDE makes the learning experience poor.Teaching materials, and access to these, were often mentioned positively. These included online communication, discussion boards and video lectures. Using AT offers sufficiently rich detail to identify key interventions and aids the redesign of the learning process. For example, the choice of an IDE for a specific language can have a larger impact than is initially apparent. This paper will report on the data collected to show where simple improvements to the use of tools may have a large impact on students' abilities to learn programming.