We all are aware that Computer Science is not programming and programming is not CS. Then why do almost all introduction to CS courses teach programming in the fancy popular language of the time?<p>Shouldn't introduction to CS be all about learning principles of the discipline in a broad perspective which then branch out to several specialised subjects later on?<p>And shouldn't introduction to programming be a separate course that teaches the way to program to achieve some concrete goals like building something?<p>Example: Wood carving techniques are taught to learn how to carve a piece of wood to build a small sculpture or something. Not to teach the principles of wood carving to become a master wood carving artist. Those things are separate.
I think it is easier to reason about the theory of time complexity if you understand the code you want to analyze than the other way round.<p>I must say however, I am not a fan of it teaching the "hip languages of the day". My intro course started with Java which was solid, but they are changing it to Python now - in what I and many professors and lecturers refer to as the "data scienification of CS" - which is a bad thing. We have data science courses, we don't need CS to become one.