That assumes a proper programming course is possible. The only technical definition is that a program is a formal mathematical proof that a particular computation is possible. Programming involves relatively few specific concepts: even boolean algebra, which is used to govern flow control in a program, is not required for all computations. Someone who is trained to program perfectly will still be unable to express a particular computation because they will not have the fundamental knowledge necessary to do so.
What I'm suggesting is that we're approaching Computation Science, programming and education incorrectly at all levels. A programmer who took few science classes would be ill-prepared to write a physics simulation, but he would be excellently able to compose an efficient broadphase algorithm (which is NP-complete). The rest of the work should be done by a physicist or mathematician - someone who is specifically trained in mechanics and linear algebra.
What I'm suggesting is that we're approaching Computation Science, programming and education incorrectly at all levels. A programmer who took few science classes would be ill-prepared to write a physics simulation, but he would be excellently able to compose an efficient broadphase algorithm (which is NP-complete). The rest of the work should be done by a physicist or mathematician - someone who is specifically trained in mechanics and linear algebra.