Hi David,
My thinking is that since technical criticisms of C and C++ on language details have not worked - people actually say they like the quirks, that we should enlighten people as to the basics of computing. C and C++ contravene those basics. I do plan another article to criticise C and C++ at this level - that is to cut it off at the legs.
For example, most people think Turing machines are a mathematical curiosity. But no, they are the fundamental model of computation with just three elements - processor, state machine (program) and memory. That’s all that is needed for computation. Everything in electronic computers is just implementation. Memory in particular. The ultimate memory is just lots of fast flat memory. Turing machines in effect have an infinite amount of registers. These ‘tape cells’ are the only addressable elements.
The memory hierarchy is just implementation between registers, cache, RAM, disk, tape, etc. At application level programs should only have one level of memory with one kind of addressing. There should not even be files. It is strange that Google has put programmer accessible registers into the Dalvik JVM - a big step backwards. That’s why I like the Burroughs stack architectures - Bob Barton seemed to understand the one memory level principle - no programmer addressable registers (but they were in the processor) - associative memory was invisible, like today’s cache, the first commercial implementation of virtual memory to seamlessly extend the memory space. They understood this from University of Manchester (where Turing worked). All other machines have worked to make all this visible at most levels. Even files are a bad idea - ultimately where computers store information, but really a low-level implementation. Students are much to drilled in memory levels and files as the way computers work - we should dispel those notions.
I think that since most computer people believe that such things as registers, memory levels, files, etc are the basics of computing, we have an uphill battle. They are not the basics - the fundamentals of computing are much simpler. The simpler mechanisms are in fact much better building blocks for far more sophisticated applications and even system software.
Then the four pillars of design - abstraction, manipulation, axioms, and lastly representation.
In all the courses I teach, memory levels as implementation of a single level and the four pillars are taught in the first lecture. Axioms and DbC are mentioned frequently throughout. We need to get all teaching institutions to teach these things and to constantly remind students that even though we teach a lot of detail, that does not undermine these fundamentals. It is very difficult to build correct and efficient systems when we get away from the fundamentals.
We can’t wave a magic wand and change this situation over night, it will take slow education of the industry.