When I was young I always enjoyed playing with Mindstorms. It was my first experience programming. For me it was amusing that I could build some robot with Lego and make it retrieve a ball from our living room.
Sadly jumping from the block oriented programming to "real" programming of the Hitachi H8 microcontroller was not very straight forward, so I kind of hit a wall in that regard. Maybe this collaboration will act as a better gateway to "real" programming.
I have somewhat mixed feelings about this. On the one hand, block-based "programming" does allow children/newbies to construct something that works. On the other hand, almost nothing usable is being programmed this way. So I'd say it's more or less fine as a kind of introduction to general rules of programming, but the sooner you get to the actual code, the better.
That said, microcontroller programming is something very specific in the sense that the same thing might (and often is) programmed in a completely different way on another device, so basically a large part is just getting to know your hardware. Fortunately, these days several abstraction layers are available for people who need them, from MicroPython to FreeRTOS.
They're exclusively written in Python, some of them using Bluetooth for remote control, some using pollution APIs to display data and also TensorFlow for image recognition.
If memory serves, a decade ago LabView was fairly involved in the robotics-education space, as a "real" block-based language that industry actually used and that kids could theoretically graduate from teaching languages into. Only kids I saw using it were those whose parents used LabView at the day job from an industrial background though.
Depends what you mean by “usable.” Are you going to ship it in military hardware? No. But I built a block based program connected to a motor that gave kids a candy if they guessed the number that the computer was thinking of in less than 6 guesses. A 4 year old invented binary search within 10 minutes.
Block based programming allows people to make working applications these days. See: Mendix, Labview, Betty Blocks and many many others besides.
PLCs have historically used ladder diagrams, which are also not 'code'. I've seen Excel spreadsheets that you would have been hard pressed to replicate using code.
Programming in its very essence is telling a machine what to do, what form that comes in isn't all that relevant, and code is just one of those forms.
'actual code' is not a requirement for programming.
I think it's more about teaching kids/newbies to think in a programming way. That can be language agnostic. You're essentially trying to achieve something "complex" using simple instructions. At a basic level that's a great way to learn programming. As the problems get more complex it becomes obvious why paradigms & architectures exist, and your programming skills can improve.
I think that's the thing? Block programming languages come from folks who write "CS education" literature as opposed to the "new programming languages" literature. They're turing complete, because curriculums require teaching the use of if statements and for loops, but that's about it.
If I actually wanted to use a block language at my day job I'd want affordances for larger, more complex programs. Compiler or JIT, copy/paste, zooming in and out of parts of programs (ala Prezi or something), integration with source control diff tools, C extensions / integration with existing code, console output, file I/O, etc.
Whilst it was never completed, as funding for the program was diverted elsewhere, I worked on a team at a university using Blockly [0] compiling it to Lua, and parsing from Lua back into our specific runtime set of Blockly functions.
It could do absolutely everything that Lua could do. We also added a kind of multifile support, using tabbed views to reimplement libraries on the browser side of things (compiling into separate Lua files).
The idea was that educators at both ends of the spectrum could convert to and from the same visual representations. The primary school classes the uni were running could use blocks, and slowly move to normal Lua, one feature at a time, all the way up to the first and second year ICT programs for higher ed.
Because it could compile to Lua, we could use git and a whole bunch of other tools that already exist. There was an experimental C/asm.js branch to add in FFI support, but that was deemed too time-costly whilst the rest still had a bunch of edge-cases.
And then, unfortunately, the whole program got yanked. But about that time it was close approaching what I would consider "useable" for actual real work.
Sounds like a wonderful tool for fundamental CS courses and projects. I remember assignments like creating a Cesar Cipher using Java, being distracted by tangential stuff like what the static keyword means and importing libraries. That language was a lot to take in, just tuning-out the noise from what I needed to learn. Something like half the class did not take the second course. Most of the thrash had little to do with the assignments themselves. Being able to toggle between a visual representation of the program and the code helps students' comprehension of the core concepts immensely. That much is obvious when you work with kids on Lego robotics projects. I could imagine a tool set like that, with the flexibility to build something like a console blackjack game. It would quickly become a standard for teaching secondary school programming courses. Hopefully someone else will take up that torch before my own kids are looking at learning how to program.
This is true to a certain extent. Certainly, large problems get awkward pretty quickly using the Scratch model. However, I found this Code.org version of Minecraft[0] interesting. You primarily use the Scratch like interface, but then you can click a button, and see how your legos translated into Javascript.
The leJOS alternate firmware for the RCX was my first introduction to Java. It was amazing how complete the support was given the small footprint. It even implemented Java's threads system.
I started programming in normal languages before I did a mindstorms based project for a robotics lab at university. Going in the other direction is just as jarring because of how limited the block based system felt. It's also just a clunky IDE compared to a text editor...
Luckily now we have Arduino that hides all the nasty stuff from users. There are 2 basic blocks: unit and loop. Adding repeating code blocks into loop block isn’t that hard. Jumping from Mindstorms to Arduino shouldn’t be a big difference.
IMO: It's slightly easier for small children to learn to program than adults. I'd imagine anyone here shouldn't have an issue but saying a kid gets it isn't quite right.
Sadly jumping from the block oriented programming to "real" programming of the Hitachi H8 microcontroller was not very straight forward, so I kind of hit a wall in that regard. Maybe this collaboration will act as a better gateway to "real" programming.