Motivation
Most educational programming environments share the same blocks-based programming style. This is not surprising, studies show that visual programming environments help to learn programming by removing the possibility of syntax errors and simplifying the programming language, which allows students to focus on understanding the underlying concepts. However, a common problem we found when teaching using visual programming environments is the eventual transition to text-based languages. Most block-based programming environments don't aid the learner in this transition, instead they are more concerned with hiding the complicated syntax rules. This has led to a couple of problems:
- Students tend to think of block-based programming as not "real programming". This perceived lack of authenticity has the potential to damage the language effectiveness as students would prefer to learn what they perceive to be a "real language" such as Java or C++ instead of a "toy language" like Scratch.
- Students transitioning from a blocks-based programming language to a text-based programming language can suffer from a problem referred to as "syntax overload". Some students feel overwhelmed and frustrated by the strict syntax requirements of the text-based languages.
- Students could potentially end up acquiring poor programming habits that damage their ability to work successfully with text-based languages.
Additionally, some studies reveal that learning the syntax is not even the main problem because the students only struggle with it at an early stage. Instead, a more challenging aspect of learning programming is to be able to correctly predict the impact that changes to the source code have on the behavior of the program when it is executed. Teaching programming presents a dichotomy that is not easy to grasp for beginners: the source code is explicit and visible while the execution dynamics are implicit and harder to understand.
In order to solve this problem, some studies propose to design educational programming environments in a way that makes the relationship between the source code and its effects more explicit. In this regard, most virtual introductory programming environments provide a feature often described as liveness: allowing to change a program while it is running. In a live programming environment, the users change the program and receive immediate feedback on the effect of the change, without requiring any manual compilation steps and minimizing the time wasted waiting for the code to begin executing. Live programming shortens the feedback loop and encourages experimentation and programming by "Trial & error". Some environments also support monitoring the internal state of the program by showing the value of the variables as well as highlighting the currently executing blocks. Although these features are present in most virtual introductory programming environments, they are rarely seen in environments designed to program physical devices such as robots. And the environments that support live programming usually do so in detriment of the autonomy of the robot, requiring a computer connected at all times in order to run the programs and send the commands to the robot as they are executed. Due to the latency of the communication, these environments are limited to projects that do not require precise timing and cannot be used in many robotics competitions.
This project is our attempt to solve this problems and provide a better programming experience for educational robotics.