When people want to learn to code from scratch, they might search for an online code academy. Through a series of lessons, they would teach you the ins and outs of a language and of your developer tools. If you're bought into this way of teaching people how to code, you might try to learn better pedagogical technique.
Learnable programming asks a different question. How might we design developer tools and programming languages so coding is inherently easier to learn? How might we change the UX of an IDE such that certain programming practices are more obvious?
One of the most important questions in learnable programming is around how to tighten and facilitate feedback loops. How might we make the impact of a person's code immediately visible to them such that they're able to learn how to write better code? How might we make code playful vs. intimidating?
An example of this might be the live programming environment we implemented in GuidedTrack Live PreviewGuidedTrack Live Preview
Originally, GuidedTrack had two separate views for working with your program. You could either be in the code view, where you were editing code, or in the preview, where you saw the output of your code.
There were a few problems with that. One was that people would need to read and write code while picturing in their head what the output would be. Then when they were looking at the preview, they needed to remember the code that would produce what they were seeing. This meant that it was chal..., making it so the user can change the code and immediately see the change reflected in the preview. It also highlights the code that produces the preview, giving the user more visibility into the effect of their code.
For an excellent read on feedback loops and failure in the context of coding, read this piece by Max Kreminski.
I first heard the term "learnable programming" from Brett Victor in this piece.