I believe...that the kinds of problems you are engaged with fundamentally change with every order of magnitude of the size of program you write...:
- 0→1 line. "What the heck is this?!" What is a programming language; if applicable, how does it differ from other related things you may be familiar with, like markup languages or Excel formulae; what do "function" and "control flow" mean and why do you care.
- 1→10 lines. "How can I do something useful with a programming language?" And by "something", I mean one atomic task, but one that runs from beginning to end with correct syntax and employs those fundamental conceptual building blocks.
- 10→100 lines. "How do I break a task down into subtasks?" Modularity, reuse, DRYness, planning.
...The 3am realization is that many, many "introduction" to programming materials start at the 1→10 transition. But learners start at the 0→1 transition—and a 10-line program has the approachability of Everest at that point.
I'm going to be quoting this in future instructor training sessions. The question is, how do we act on it? In particular, how can we translate the model we've developed for Software Carpentry—volunteer instructors, two-day workshops, and authentic tasks—into something that will help librarians get from 0 to 1 to 10?