Computing literacy has become an important skill for students today. However, programming remains difficult to master because it involves concepts and procedures that are abstract.
When learning programming, students “need to imagine … many abstract terms that do not have equivalents in real life.” For instance, students may struggle to understand how “a variable, a data type, or a memory address relate to a real-life object.” 
And procedures in computing are often presented as an abstraction (e.g., loop). That is, steps in the procedures are not shown. This obscures and makes the procedures abstract for novice learners.
PhD Student @ University of Waterloo