From my modest experience in teaching computer science, but extensive experience in receiving, it I believe that the major challenge in conveying programming is that it is merely a tool for most people, which in addition requires some effort to comprehend. Nevertheless it is also rather intriguing once you master it, and (assuming that people signed up for the class wishes to do that) focus should be put on as fast as possible to have the students experience some level of expertise. Thus in many words an inductive teaching approach is very suitable for programming classes I think. Traditionally the "Hello world" application is well intended, but at least from my experience (I was trained in the rather old school bottom up fashion) too much reading and classroom theory followed from there. In recent teaching experience with a 3 weeks intensive introductory course in Matlab, most of the theoretical teaching (which effectively was approximately 10% of the course) was used on describing the assignment and the fundamental problems that the students had to solve. Despite the large class (150+), very different-
backgrounds and levels of programming skills (mostly none), everybody was engaged on the course - which the style also requires. It is my experience that (in comparison with most of the previous courses I received in the more traditional form) this was a very effective approach in terms of learning outcome, as well as to keep students engaged until the reached some level of expertise, form which on programming becomes more enjoyable. To be more concrete, I think that using high level drag and drop tools available in abundance nowadays, is a great outset for the initially exposing students to programming, as it lets them very quickly create something rather complex with the skills that they already possess, and then work form there. Within experimental psychology, PsychoPy is an excellent example of such open source software tool, which has a high level interface that lets students create ready to run experiments with very little instructions and no programming experience.