  Programmers' mental models represent their knowledge and understanding of
programs, programming concepts, and programming in general. They guide
programmers' work and influence their task performance. Understanding mental
models is important for designing work systems and practices that support
programmers. Although the importance of programmers' mental models is widely
acknowledged, research on mental models has decreased over the years. The
results are scattered and do not take into account recent developments in
software engineering. We analyze the state of research into programmers' mental
models and provide an overview of existing research. We connect results on
mental models from different strands of research to form a more unified
knowledge base on the topic. We conducted a systematic literature review on
programmers' mental models. We analyzed literature addressing mental models in
different contexts, including mental models of programs, programming tasks, and
programming concepts. Using nine search engines, we found 3678 articles
(excluding duplicates). 84 were selected for further analysis. Using the
snowballing technique, we obtained a final result set containing 187 articles.
We show that the literature shares a kernel of shared understanding of mental
models. By collating and connecting results on mental models from different
fields of research, we uncovered some well-researched aspects, which we argue
are fundamental characteristics of programmers' mental models. This work
provides a basis for future work on mental models. The research field on
programmers' mental models still faces many challenges rising from a lack of a
shared knowledge base and poorly defined constructs. We created a unified
knowledge base on the topic. We also point to directions for future studies. In
particular, we call for studies that examine programmers working with modern
practices and tools.
