A good designer must rely on experience, on precise, logic thinking; and on pedantic exactness. No magic will do.
Professors typically spend their time in meetings about planning, policy, proposals, fund-raising, consulting, interviewing, traveling, and so forth, but spend relatively little time at their drawing boards. As a result, they lose touch with the substance of their rapidly developing subject. They lose the ability to design; they lose sight of what is essential; and they resign themselves to teach academically challenging puzzles.
But active programming consists of the design of new programs, rather than contemplation of old programs.
Clearly, programming courses should teach methods of design and construction, and the selected examples should be such that a gradual development can be nicely demonstrated.