Let me add the perspective of an old dinosaur that learned to program before C had been invented.<p>C maps nearly 1:1 onto simple processor and memory models, and most importantly, gets out of your way and lets you get on with solving your system programming problems. Before C, just about any meaningful system programming task required a dive into assembly language.  In that context, C was a huge win.  It is also what makes C the langauge of choice for embedded development today.<p>Of course, system programming problems are not the bread-and-butter of most develpers today -- and a good thing, too. We can now build on top of solid systems and concentrate on delivering value to the customer at much higher levels of abstraction: the levels of abstraction that are meaningful to customers.<p>I dearly love Python because it allows me to work at levels of abstraction that are meaningful to the user&#x27;s problem.  I dearly love C when I want to wiggle a pin on an ARM Cortex-M3.<p>In my mind, CS education should start by teaching problem decomposition and performance analysis using a language like Python that provides high levels of abstraction and automated memory management.  Then, just like assembly language was a required CS core course back in my day, students today should spend a semester implementing and measuring the performance of some of the data structures that they have been getting &quot;for free&quot; so that they understand computing at a fundamental level.  Some will go on to be systems programmers, and will spend more time at the C level.  Some won&#x27;t ever look at C again, and that is OK.<p>In the end, CS education is about how to solve problems through the application of mechanical computation.  The languages will evolve as our understanding of the problems evolve and our ability to create computing infrastructure evolves.  CS educcation should be about creating people who can contribute to (and keep up with) that evolution.