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:
- read the vocabulary -- what do these words mean?
- follow the flow -- what happens when?
- see the state -- what is the computer thinking?
- create by reacting -- start somewhere, then sculpt
- create by abstracting -- start concrete, then generalize
The language should provide:
- identity and metaphor -- how can I relate the computer's world to my own?
- decomposition -- how do I break down my thoughts into mind-sized pieces?
- recomposition -- how do I glue pieces together?
- readability -- what do these words mean?
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.