I have been thinking about programming, and how to teach it for beginners (who are not going to be computer scientists, but would find it useful to have the coding skills for their own work in metallurgical and materials engineering) for the past couple of months. One thing that I immediately recognised (of course, it is obvious; but I never thought about this problem till about a couple of months ago) is that the way I want to (and can) teach is very different from what a computer science person wants to and can. That tells, at some level, like mathematics, programming is also different for different people; the way computer scientists view programming is in fact very different from everybody else (who do use programming for their purposes).
In fact, the other day, a senior colleague told me that the first course in everything (mathematics, physics, chemistry, and programming) should be taught by engineers for engineers. At some level, I tend to agree with him; the mathematics taught by a mathematician demands a kind of maturity, which would be easier to achieve for students with non-mathematics backgrounds if they dealt with some applications of mathematics in domains in which they are comfortable and have a physical feel.