Teaching novice programmers
Speaking as a one-time IT lecturer, I have to say that NO one language is suitable for teaching programming to beginners. All languages have their quirks and the last thing novice students need is to get bogged down in syntax before they've even had the chance to learn the basics.
Back when I was lecturing, I developed a curriculum module for entry-level students called "The Robot's Kitchen". The premise was simple: given a gridded map of a kitchen, with all the ingredients and equipment in specified locations and a recipe for chocolate cake, get a robot to make the cake. The robot can only understand simple commands, like MOVEFORWARD, TURNLEFT, TURNRIGHT, PICKUP etc. as well as IF/ELSE/ENDIF and DO/WHILE/UNTIL for repetitive task optimisation. In this way, I was able to impart the essential principles of programming - complex problem breakdown, function calls, conditional branching, looping and process flow - without the students having to learn the syntax of a specific language or writing a single line of code. Most of the students were amazed at how a half-page cake recipe turned into a twenty-page assignment, but as I explained to them, that's exactly what programming is all about - taking a complex problem and breaking it down into simple, single-action steps.
This paid dividends to the students in the second term, when I started teaching them actual programming, using Pascal to begin with, then C - NOT C++! Because I'd primed the students with programming methods in the Robot's Kitchen assignment, they had far fewer problems getting their heads around the principles of programming than students in other classes. While I don't want to sound like I'm blowing my own trumpet, I should point out that my class consistently had the highest pass rate in the faculty, and that by my second year, new students who had friends in my previous year's classes were asking specifically to be in my class at enrolment.
As to programmers not needing to know about machine micromanagement (memory allocation/deallocation, managing the stack and so on), I have to disagree. As a programmer, you are taking complete control of the machine, and if you don't understand how the machine works, you have no hope of controlling it. Even if you end up as a DBA or frontend developer, you should still know about memory management, stack size and clock cycles because you still need to optimise your code for security, speed and efficiency - and you can't do that if you don't know what makes a computer tick. All programmers, even 3GL programmers, should be able to think in binary and hexadecimal and know the powers of two at least to 65536. They should know about the limitations of stack size and the importance of memory management - the famous buffer overflow exploit is a prime example of what happens when programmers don't understand these basics. That's like needing to know your alphabet before you can read Shakespeare.
Finally, C is probably the best language to teach once your students have a good grounding - not at entry-level. Nearly all other 3GLs are based on C and use its syntax, so if you can program in C, you can easily learn any other language. I don't like C++ because it takes too many shortcuts and is too idiosyncratic. But C enforces good programming practice and forms a solid foundation for the student to build their programming career on.