Beyond Watching: Next Generation Programming Tutorials Leveraging Interaction Data
In the past 30 years, thanks to advances in technologies and availability of online resources, the learning experience dramatically changed. In the context of programming education and learning, it is nowadays possible to learn new technologies and acquire degrees exclusively using online resources, as in massive online open courses (MOOCs). Among online resources, a prominent role is covered by video tutorials, since they can be used to disseminate a form of procedural knowledge - through interactive, step-by-step experiences - which is essential to learn programming. In fact, learning how to program requires not only acquiring a base of conceptual knowledge from computer science, but also understanding how to concretely combine the available activities, like editing and navigating source code, to effectively realize a given programming task. Similarly, learning a new complex framework or API requires a programmer to learn both the high-level concepts behind the design choices and the concrete mechanisms to compose the APIs. Both programming tutorials and lectures consist of a video recording of the instructor and a combination of slides and screencasts of the IDE with voice-over instructions. Thus, a fundamental part of the tutorial and of the lecture - that is, the content of the IDE itself and its evolution during the tutorial - is not accessible. This inherently undermines one of the fundamentals mechanisms of learning, which is experimentation. If the developer / student wants to experiment with the code of the tutorial, she needs to resort to some additional material - like code in a repository - provided by the instructor, which represents the state of the code at a given point in time, normally the end of the tutorial. Recent approaches introduced the idea of integrating video tutorial recording with interaction data recording, \ie the recording of the activities performed by a developer in the IDE. This conceptually allows to replay the status of the tutorial code at given snapshots during the video itself. However, these snapshots are relatively coarse grained, and more importantly they are not integrated with the IDE where the tutorial or the lecture has been recorded. Thus, they simply allow to navigate the evolution of the code during the tutorial, but they do not enable full experimentation. Whenever the student wants to experiment with the code on the tutorial, she needs to effectively replicate the state in an external IDE.