Position: Reusing in the Small: Promoting Procedural Abstraction in Scratch Communal Learning
Peeratham Techapalokul, Eli Tilevich · 2019
One of the most important concepts for budding programmers to master is procedural abstraction. Defined as placing coherent, possibly reusable, functionalities within their own encapsulated program units (e.g., procedures, functions, methods, custom blocks), this concept requires a tangible increase in programming proficiency to master. First and foremost, procedural abstraction is a means of conquering complexity- the ability to convincingly divide the program functionality into distinct coherent parts that are easy to understand and use. In addition, as invocable units of functionality, procedures provide ready-made components that encapsulate the hidden details of their implementation. One of the biggest advantages of Scratch is its seamless support for communal learning, realized as the ability to share and remix projects with ease. However, programmers remix Scratch projects in their entirety, carrying out the corresponding reuse and extension activities at the project level of granularity. In this position paper, we argue in favor of extending Scratch with the ability to reuse individual procedures, implemented as custom blocks. This ability has the great potential benefit of instilling the value of procedural abstraction in the minds of beginner programmers. We discuss how a reuse facility for custom blocks can be added to Scratch by identifying the corresponding design objectives, challenges, and opportunities.