Programming education is a widely researched and intensely discussed topic. The literature proposes a broad variety of pedagogical viewpoints, practical approaches, learning theories, motivational vehicles, and other elements of the learning situation. However, little effort has been put on understanding cultural and contextual differences in pedagogy of programming. Pedagogical literature shows that educational design should account for differences in the ways of learning and teaching between industrialized and developing countries. However, the nature and implications of those differences are hitherto unclear. Using group interviews and quantitative surveys, we identified several crucial elements for contextualizing programming education. Our results reveal that students are facing many similar challenges to students in the west: they often lack deep level learning skills and problem-solving skills, which are required for learning computer programming, and, secondly, that from the students’ viewpoint the standard learning environment does not offer enough support for gaining the requisite development. With inadequate support students may resort to surface learning and may adopt extrinsic sources of motivation. Learning is also hindered by many contextually unique factors, such as unfamiliar pedagogical approaches, language problems, and cultural differences. Our analysis suggests that challenges can be minimized by increasing the number of practical exercises, by carefully selecting between guided and minimally guided environments, by rigorously monitoring student progress, and by providing students timely help, repetitive exercises, clear guidelines, and emotional support.