Posted by Tom De Schutter on December 19th, 2013
To keep up with the continuous introduction of new gadgets and capabilities in our smartphones, cars, houses and stores, it is clear that we need more software programmers. That is why multiple companies are coming up with new and innovative ways to introduce people — especially children — to programming. To lure them, the makers of these programming products try to mask the programming aspect as much as possible under a layer of “fun;” whether it is having children design their own video game by mapping a maze and placing down obstacles, create a story through the drag and drop of graphic tiles in order to animate an object or build genuine robots with Legos and program them to interact with their environment.
The most frustrating part of programming, regardless of the form factor, continues to be finding and debugging an issue. First of all, figuring out if there is a potential issue is quite a task because it implies that you foresee all possible use cases and test if these function correctly. Even for the most well-known software companies this continues to be a stretch since we tend to use devices and software in a way that is unforeseen, or at least not properly tested by the software developers. Good testing is definitely an important skill to learn. I realized that this is less straightforward than you think when I reviewed a simple computer game that a seven year old had created, in which a droid has to maneuver through a maze guarded by another droid. When going through the different levels, I reached a level where there was no path from start to finish. Apparently there were a couple of extra walls that the seven year old didn’t notice before calling the game done.
Secondly, debugging an issue is easier said than done and the more items there are interacting, the harder it gets. So if you want your Lego Mindstorms to do something specific and it doesn’t work out the way you want, it might be hard to figure out what is going wrong. Are the sensors working properly? Is everything connected correctly? Did you write the software for the right environmental conditions? Or is there just a “plain” bug in the code? Having the right set of tools to review everything that is going on in the hardware and the software can be a big help to get to the bottom of the issue.
The concepts of determinism, visibility and control also significantly help to reduce the debug effort of complex software running on heterogeneous multicore designs. It might not have the same layer of fun compared to what our children are doing to get introduced to programming, but as was evident from an email this week from one of our customers, it is still quite satisfactory to see the Linux Penguin logo pop up after a successful boot sequence on a virtual prototype representing a device in development.