|dc.description.abstract||As technologies advance and play an increasingly larger role in our lives, computational thinking---the ability to understand computing concepts and procedures and their role in the tools we use---has become an important part of our training and education in the 21st century. Thus initiatives to improve people's technical literacy have become a top priority in many countries around the world, with programming classes becoming a mandatory part of many K-12 curricula and increasingly available online.
Unfortunately, many find programming intimidating and difficult to learn because it requires learning abstract concepts, languages, and procedures. Programming concepts and languages employ abstract terms and unfamiliar syntax and conventions; yet how they relate to what we already know (e.g., real-life situations and grounding metaphors) is not always explicated in learning materials or instructions. Learning programming procedures is also difficult due to its abstract nature. For instance, while learners generally need to be explicitly trained on the execution steps in order to be able to trace (or abstract) execution steps, how computer programs are executed and what happens (e.g., in memory) in each step are often omitted or presented as abstractions (e.g., loop), obscuring the process for novice learners before they can master the ability to step through the procedure on their own. As a result, they are often forced to mechanically memorize arbitrary conventions, procedures, and rules in programming without forming any intuition about them.
The reason for these difficulties can be attributed to dead-level abstracting, a phenomenon where information is stuck in certain levels of abstraction. High or low, the lack or absence of interplay between abstraction levels makes it challenging to understand new information in a meaningful, efficient, and effective way. Although the ability to "rapidly change levels of abstraction" has been recognized as a key characteristic of computational thinking and its importance has been stressed countless times, instructions in computing education tend to be mired in abstract levels of abstraction and lack opportunities for students to develop this ability to move up and the ladder of abstraction.
This thesis aims to address this problem by proposing a model where learners can move between levels of abstraction. Specifically, I introduce coding strip, a form of comic strip that has a direct correspondence to code, as a tool for teaching and learning programming concepts, languages, and procedures. By using comics that directly corresponds to code, coding strip is a model instantiated from a framework for computational thinking: learners can move between concrete and abstract levels of abstraction to develop a way of thinking about programming concepts, languages, and procedures in terms of real-life situations and objects. To support its use, this thesis contributes methods, tools, and empirical studies to facilitate the design, creation, and use of coding strips.||en