1 Topic Background
A semantic model explains how operations in a program execute. Different models support different tasks. Just as programming language researchers often construct models that focus on features of interest and ignore features deemed irrelevant, programming learners also usually rely on models that only approximate the truth by focusing on useful or appropriate features and abstracting away the others. For instance, to understand even a functional program with recursion, it may not be necessary to understand the full details of the stack (with frame pointers and return addresses and so on).
Many semanticists believe that a semantics is useful for
programming. Computer science educators also believe semantic
models—
The gap between the semantics and education research communities reflects a difference in concerns and expertise. The former have enormous knowledge of different models: their strengths, weaknesses, and affordances. However, this knowledge is usually limited to theoretical matters (e.g., the suitability for constructing certain kinds of proofs), and for highly-trained audiences. While many semanticists believe that a knowledge of semantics is valuable for programming, there is little to no understanding of which models are actually useful to programmers under which circumstances.
On the other hand, the computer science education community has enormous knowledge about the strengths and weaknesses of student programmers. There are also many educators and education researchers who believe students should be taught a semantics while being taught programming. Unfortunately, there is generally little to no knowledge in that community of the semantics ideas developed in programming languages. What semantic models are used are often simplistic, and either ambiguous or even inaccurate in the face of basic concepts like aliasing.