This chapter is concerned with the study of how novices learn computer programming. Four research issues addressed in this chapter are (I) users possess many misconceptions of machines and procedures, (2) learning to program involves building a concrete model of the system, (3) successful learning depends on the availability of prerequisite cognitive skills and knowledge, and (4) learning to program may be a vehicle for teaching students about their own thinking processes. Research findings and applications are described for each of these issues.