I think that you're expecting too much. In todays world, although it would be nice for people to learn about assembler optimisation and software rendering, people simply don't want to.
I believe that's OK for 2 reasons
1) many more people take up programming as a HOBBY. Yes it's a big one, in some cases the only one, but it's not intended to be a profession. Time is taken up by school so much that people don't have the time to learn such advanced things. Even if they did, they'd rarely find a use for it (by this I mean a situation where they would *need* to know it).
2) it's becoming less necessary. I'm not saying that's a good thing, but when people programmed in DOS, they communicated directly to the gfx card. OK, people knew more and were on the whole better coders, the code was convoluted. Ask anyone who programmed in DOS, and I think they'll say that todays code is cleaner.
What I think we do need to look out for are people who don't even bother to learn a language. They copy-paste nehe code, change the pictures and call themselves 1337 programmers. Now *this* is a bad trend.
btw, I think it's actually a bad idea for newbies to learn C and C++. The two languages (when used properly) encourage two different types of coding. It's better to pick one and, sadly in my opinion, that is most often C++.
P.S. Paragraphs are good