Let's not confuse "programming" with "computer scientist." I am a pretty good programmer. I am in no way a computer scientist. Asking what the "best" way to teach computer science is is akin or asking what is the "best" way to teach biology or physics or history.
A Computer Science degree does not, and should not, be the sole qualifier for whether or not you want to be a programmer.