In Mashhuda’s comment from my blog entry the other day about universal programming literacy, she contrasts the chair made by a skilled carpenter with the pre-fab kit that the consumer buys from IKEA and assembles at home. I think this might be a misleading analogy to bring to the question of “consumer level” programming.
The major factor missing from the IKEA-assembling consumer’s experience is not technical expertise or deep knowledge of the tools of the trade, but rather any sort of design process. The IKEA chair kit is deliberately designed to avoid any design decisions on the part of the consumer. And we can argue – as Bill Buxton has, consistently and articulately – that the major hurdle to learning good programming is not the mastery of the technical tools, but rather an effective knowledge of design process.
I think a better analogy is with cooking. Millions of home cooks do a reasonable job of making good and original recipes. Often they start with a recipe that they learned from a book or neighbor, and then they iteratively refine this recipe over time, often creating something fresh and original.
To anyone who knows both programming and cooking, it is clear that both involve algorithmic thinking – the ability to produce a well defined result from a series of procedural steps. The major difference is that cooking requires direct action, whereas programming requires instructing the computer to perform actions by proxy.
When I described the UPL question to my colleague Natalie Jeremijenko, she quite sensible asked me “Why will people be doing it? What purpose will it serve them?” And I think she was exactly right. After all, Bill Buxton’s questions about design process are not primarily about the tool, but about the purpose – design begins not by picking up your tools but looking at the problem you aim to solve.
By this reasoning, the tools that allow millions of people to program in a powerful way are going to be those that allow those people to achieve goals which really matter to them. For example, very many people are motivated to create recipes and to compose original music, and in both cases many of those people become quite good at cooking or composing. The populations that can do these things well is much larger than is the population that can program.
I suspect that the reason for this is not that either creating recipes or composing music is an inherently easier task than programming, but rather that each is a communicative task, understood to be a direct way for one person to emotionally connect and bond with another. I think we are going to see a kind of programming tool effectively embraced by large parts of the population only when that tool is shown to be effective in allowing emotional connection and bonding between people.