A programming system has two parts. The programming "environment" is the part that's installed on the computer. The programming "language" is the part that's installed in the programmer's head.
This essay presents a set of design principles for an environment and language suitable for learning.
The environment should allow the learner to:
The language should provide:
Khan Academy's tutorials encourage the learner to address these questions by randomly adjusting numbers and trying to figure out what they do.
Thought experiment. Imagine if you bought a new microwave, took it out of the box, and found a panel of unlabeled buttons.
Imagine if the microwave encouraged you to randomly hit buttons until you figured out what they did.
Now, imagine if your cookbook advised you that randomly hitting unlabeled buttons was how you learn cooking.