Disclaimer: I've never taught a class, so don't put too much weight on my speculation on how students would react. On the other hand, actual educators are replacing lisp with python [1], so I don't think they can be trusted...<p>The C subset of C++, with a few quality of life exceptions - no need to torture the students with printf codes when there's std::cout. It will teach the fundamentals of how computers work, without any hidden magic.<p>Pseudocode is a good starting point for a programming task, especially when teaching, to convey the high-level solution without the added confusion of unfamiliar programming syntax, but it alone is, in my lay opinion, insufficient. Without seeing any results it might be hard to keep students interested, and it won't uncover any mistakes in thinking, won't teach the rigorous attention to detail needed to create a working program. E.g. using <= instead of <, or off by 1 errors, or any number of other bugs. Like it or not, learning to deal with such 'trivial' details is a big part of programming.<p>I say the C subset only because virtual functions, templates, inheritance, polymorphism, and destructors are a bit much for beginners still coming to grips with the basics. But in principle, once they understand how it works behind the scenes, I don't see the harm in using standard containers and other niceties.<p>[1] <a href="https://news.ycombinator.com/item?id=14167453" rel="nofollow">https://news.ycombinator.com/item?id=14167453</a>