I'm copy-pasting a couple suggestions from our programming clubs, in no particular order:
- People avoid building custom blocks because the "define" stack takes up space and that bothers them, plus the block prefix (my class_foo) and the default "this" upvar scare them.
- The "Class" nomenclature is a bit confusing, for a couple reasons:
- Seasoned "OO" programmers (albeit seasoned in not-so-OO languages) expect the first object of a class to be a class definition, they then expect changes in what they think are instances of that class to not propagate "upwards", and get confused when that doesn't happen.
- Beginners don't know what classes are, so they don't benefit from the nomenclature either. They do understand what clones are though, as they've seen them in Scratch and Snap!, and although instances in GP don't map exactly to clones, I feel they're closer to Scratch clones than to traditional instances of a class. Maybe just renaming "Class" to "Object" and "Instances" to "Clones" would help both groups grasp the concept better.
- Both beginners and somewhat experienced programmers have a hard time understanding why "animate" works different than "while true". I had to explain this a million times to them, and they still repeat the same mistakes over and over again. I'm not sure what the right abstraction should work like. Maybe the "animate" block should be reworked into a "forever" block that only waits for the next rendering frame when there are graphic-related blocks embedded in it.
- Users miss a way of combining projects. In our programming clubs sessions we encourage people to split into smaller groups and focus in different parts of the big problem, but then I have to manually join their pieces together in a text editor, and they feel I'm performing some kind of magic they can't control.