What should be taught is the ability to look at and analyze a problem to find the best available tools (in this case computer language) to accomplish the solution of the problems, not how to use a tool or tools directly. It needs to be taught how to decide whether to use a screw or a nail, then which tool is better (a screwdriver for a screw and a hammer for a nail), and finally how to use that tool in a practical way. Schools should be teaching computer languages as after thoughts and as a means to problem solve, not as an end in themselves.
Learning and using most all higher level programming languages is a no-brainer for someone that has been trained in problem analysis, compilers/interpretors are self-teaching tools. Has C++ brought us better solutions (more efficient, easier to maintain, less complexity,
To the systems programmer, users and applications serve only to provide a test load.