In this paper we discuss how computer supported collaborative learning (CSCL) can be deployed to develop new skills and habits in students at university level. These considerations led to the development of an adaptive environment to develop good programming habits. We start by describing the difficulties in teaching and learning programming and more concretely, in making students good programmers. Afterwards, we explain why group work is an adequate approach to learn programming. Next HabiPro, an environment that trains students in Programming is described. The principal features of this system are: It is adaptive: depending on the group features the environment proposes different pedagogic methodologies and different exercises. The tool promotes collaboration and interaction among the students. The pedagogic methodologies are based on reflection, observation, and relation. Finally, we present our conclusions and discuss future work.