Correction accepted. I should have known one was coming.
Plus, of course, it was designed to be easy to compile on generally insufficient machines and standard Pascal’s I/O model (so ably skewered by Kernighan) pretty much assumes punch cards.
I agree with much of this, and I disagree only in detail. I think ‘odd’ programming languages should be taught more, languages like Haskell (to teach type systems other than the C model), Erlang (concurrency, basics of IPC), Smalltalk (object systems, GUI design), Forth (write a device driver, extend the compiler), and, yes, both Scheme and Common Lisp (Scheme because it has first-class continuations, Common Lisp because it has everything else). I like the idea of teaching data structures in Lisp because it’s so easy to turn data into code and turn data processing into an exercise in compiler design. Memory references and efficiency is a topic all its own and should be taught in C, but I don’t get the huge aversion to assembly. Knuth likes it well enough.
A better way might be to have students design their own languages that must support different paradigms to a given extent. This dovetails neatly into a course on compiler design, which necessarily requires data structures and cost/benefit analyses (treating strings as lists: defensible; treating numbers as lists: not so much). My thrust is that we should teach students that paradigms and strategies matter more than syntax (or the lack thereof, in the case of Forth and Lisp), and we should dispel forever the hoary old fallacy that all languages are equally powerful. (The next one who claims that rewrites Microsoft Word in INTERCAL.)
OSes are another area where students should be exposed to a whole lot more than they ever are. Smalltalk, Lisp, and Forth are all good entries into OS design. There needs to be some focus on OSes that handle persistence transparently, as opposed to the filesystem model (Smalltalk, again). Students should understand what goes into designing a GUI, and why GUIs largely have not changed for over 25 years. Of course, they should also learn the advantages of the command line, as well as the advantages of batch processing and how batch gave way to the command line. (Or hasn’t, in the case of the AS/400 and so on.) Virtual machines (hypervisors, to you marketers out there) should be taught not only because they’re a useful and interesting topic, but because it’s blindingly obvious that they’re the New Old Thing and aren’t going away again for a while. A compare-contrast between VM (as in CMS), VMWare, and Xen is in order. Again, concepts rule over specifics and the Great Wheel will turn.