'Knowledge' is one of the main results of software engineering, software projects and software process improvement. During software engineering projects, developers learn to apply certain technologies and how to solve particular development problems. During the process of software improvement developers and managers learn how effective and efficient their development processes are, and how to improve these processes. As 'learning' is so important in software practice, it is logical to examine it more closely. What is learning? How does learning take place? Is it possible to improve the conditions of learning? This chapter presents an overview of learning theories and the application of these theories in the softwareengineering domain. It is not our intention to be complete; our objective is to show how established learning theories can help to facilitate learning in software development practice.