@nedbat I'll readily agree that learning C doesn't teach you how a computer really works. But when teaching how a computer really works (not really -- I still keep it relatively simple), I find C to be useful.
When discussing a model for processor architecture, I find it easier if my students have been exposed (and played around a little with) assembly. I find that C is a useful stepping-stone to make assembly a bit more graspable. The hands-on portion of the first third of my course could be taught in Java, but that would require a greater leap to assembly.
Later in the course, we talk about memory-mapped I/O -- the hands-on portion definitely isn't do-able in Java or Python.
Have I considered languages other than C? Sure, but on the balance, C seems to be the right choice for this course for these students.