I think there are three issues to consider in educational programming languages:
- Engagement
- Learning curve of the educational language
- Ease of transferring skills learned with the educational language to real world programming
The engagement issue is the most important to deal with, because if the student isn’t motivated to continue learning programming than nothing else matters. People tend to be motivated when they’ve built something they feel is cool.
What’s cool is of course subjective to the user. The traditional programming models used by languages like Python, C/C++, Java, BASIC, Fortran, etc. all harken back to an era when user interaction with computers was text-driven — you type commands on the screen, and the computer spits out text in response. If you were using computers in that era, being able to write a “Hello World” program or do any of the standard text-console based programming assignments would seem cool.
For kids growing up today, that era is completely foreign. Any interaction with a computer that they’ve had is with a GUI. So even though it may be very simple to get Python to print “Hello World”, the awe factor is just not there for most kids!
So how do you engage today’s kids? Well, first let’s split them into two groups. The first group is already really into computers, and maybe has thought about some apps they would create if they knew how. The second group hasn’t had a lot of exposure to computers, and has never considered the benefit of learning programming.
For the first group of kids, I think the ideal learning environment would be something like a modern adaptation of old-school Visual Basic. The designers of VB realized that the traditional imperative programming paradigms were insufficient for modern computing. Computer Science educators are still a little oblivious to this though. In the modern computing era, I think it’s perfectly reasonable to teach concepts like GUI design and event-driven programming BEFORE teaching traditional programming topics like flow control, data structures, recursion, etc. We live in an event-driven multi-threaded world. There’s no reason to hide this from intro students — REPL is great if you grew up using command-line interfaces, not so much if you didn’t. A modern VB (and I don’t mean VB.NET) that has the simplicity of old-school VB, polished to remove some of its eccentricities, and which perhaps adds some of the pedagogical ideas from Scratch, would be a great learning tool.
For the second group of kids, the challenge is a little greater because you’re trying to get them interested in computing and programming at the same time. This group doesn’t have a lot of expectations, and they may not appreciate the intricacies of GUI design needed to make real apps. So the thinking with Alice and Scratch is that it’s better to have a restricted interface — a purposefully limited sandbox — where the kids can still use their creativity to produce stuff that looks cool like animations and games.
Back in the 90’s when Alice was invented, its 3D interface was pretty state-of-the-art, and it essentially allowed you to produce 3D content reminiscent of some games of that era without any of the normal headaches that go into 3D programming. There wasn’t any other tool at the time that had taken 3D content programming and made it nearly that user friendly. The other key idea behind Alice is that instead of dealing with abstract entities, the beginning programmer is programming things that are closer to tangible real-world objects.
Of course, today Alice is showing its age, and could really use a major update. To increase engagement, I would use Unreal Engine 4 for the graphics and increase the physical immersion by utilizing virtual reality. If Randy Pausch were still alive, I believe that he would be looking at ways to add VR to Alice, because that just naturally seems to be the ethos of the project. I imagine a fully programmable virtual world, something reminiscent of the Matrix, where you can program in all kinds of weird physics.
As for Scratch, it’s main contribution was giving kids a way to code without learning syntax. That idea is useful in itself. Of course, it might be more useful if it the code blocks were based on a real programming language.
