Teaching computer programming skills within the university context has proven to be a difficult and challenging task. The cognitive load placed upon students is heavy, and it is unclear if traditional instructional practices are optimal within this area. Traditionally, student attrition levels have been high, and ways to address such problems need to be considered. This thesis is concerned with ways to improve university course materials and instructional provisions, specifically within the context of teaching advanced programming skills to undergraduate students at the National University of Samoa. Over a three-year period, an instructional program was developed, and referred to as CABLE (Cognitive Apprenticeship Based Learning Environment). This approach was informed through considerations of recent cognitive learning theories such as collaborative learning, information processing, and cognitive apprenticeship. Recent research on learning theory has indicated that a learning environment should be managed so that students are encouraged to set personal goals, actively gather meaningful information, monitor and evaluate their own learning and reflect personal learning experiences in different authentic environments and social contexts (Brown & Campione, 1996; Wilson, 1996). Pedagogical approaches have been developed, where the aim has been to modify the learning environment so as to facilitate the development of students' higher order thinking skills, and to support the shared construction of knowledge. The pedagogical model, CABLE, was created based on the construct of cognitive apprenticeship, enhanced by elements of collaborative learning, implemented both in face-to-face mode and online. The CABLE model was evaluated in a series of field trials (Projects 1, 2, and 3). In Project 1 and Project 2, the CABLE approach was evaluated by contrasting it with the traditional approach to university instruction. The main aim of Project 3 was to evaluate the effectiveness of the learning environment, based on self reporting by students on their levels of engagement. Students in both the CABLE and traditional groups were given the same set of instructional materials in their JAVA training, and participated in similar lectures and practicum classes. The main differences between the two approaches were: (a) the use of structured and individualised feedback in CABLE by means of an email help desk; (b) the provision of a rich metacognitive experience through articulation and the use of "think alouds", ii feedback from the lecturers, careful scaffolding in terms of questions posed throughout the study materials; and (c) structured collaboration in class projects and activities. In Project 1 and Project 2, the effectiveness of the CABLE approach was evaluated using a post-test on computer programming skills and problem-solving skills. Student attitudes towards the CABLE approach were evaluated using a post-study questionnaire, test scores, student interviews, and weekly feedback from the online helpdesk. In Project 3, levels of student engagement were evaluated by self-reporting measures. From these field trials, it was evident that (a) CABLE provided a viable instructional model which could be introduced into the normal conduct of university programming courses without apparent detrimental consequences; (b) students exposed to CABLE evidenced increased achievement on Java programming scores relative to those taught in the traditional (non-CABLE) mode; (c) there were no differences in student attitudes towards the learning environment, between students taught with CABLE, and those taught in the traditional university mode; and (d) students taught under CABLE reported higher levels of mental engagement when compared to students taught via traditional mode. Students taught programming in CABLE showed positive attitudes towards the collaborative elements and also towards the online learning elements of CABLE. In the light of these findings, it was concluded that CABLE, as an instructional program derived from considerations of social learning and contemporary constructivist psychology, constitutes a viable instructional approach which can be introduced into the normal conduct and administration of university courses in computer programming. iii