> It is selling you into the world of computer science
I personally don't like being sold something when learning and feel like there's a fine line between something being sold and something being presented as important or interesting. I acknowledge this is a strong personal preference.
> It's an "intro" course. In fact, this intro course covers way more than what colleges in the US do for an intro course.
Well, that's part of my problem with it. If it's an intro course, why throw so much into it? If it's meant to survey a lot of things, then why not provide a wider view? Having not taken the course, I am speculating here, but I would guess there's two outcomes to a student taking the course. They either get a superficial view of what they cover or things are covered at such a pace by going both deep and wide that there isn't time to properly ingest everything. That's why I am curious of hearing about actual outcomes from people taking the course. Courses that cover too much, for me, get me thinking in too many directions to be useful.
> Nope, and why should they be?
I was just asking the question, not saying they should be. But I do feel it's a bit of a disservice not mentioning them given that they inspired a wide swath of today's modern programming features. I also feel they are the ideal teaching languages, especially for intro courses.
> David Malan answers this here: https://qr.ae/pNsCkQ
I'm fairly unconvinced by that answer, which is rather predictable. Why is it important it's close to hardware? There's nothing stopping you from implementing data structures or exploring buffer overflows in other languages. Mathematicians don't start teaching students mathematics by being "close to the hardware". If they did, we'd start off the university education with real analysis, topology, and abstract algebra. Instead, calculus is the primary starting point, which sits at the right level of abstraction. C is exactly at the wrong level of abstraction. It's too far away from the hardware to really understand the hardware <-> software interaction in depth, and it's too low-level to understand the more useful abstractions in computer science and programming. I personally view abstraction as the key point in learning programming and computer science, and C is probably the worst language you could pick for that.
The approach found in Nand2Tetris and the book The Elements of Computing Systems is far more interesting if one wants to truly understand how software stacks on top of software that stacks on top of hardware.