You can do just fine with C++. Or Java. I have taught new programmers using both. I think you can do better with Python, because there's less initial friction. I'd rather not have to tell students to ignore "public static void main" because there are several concepts in that phrase alone that I'd rather they not worry themselves with. I want them to focus on developing the ability to think algorithmically.
But, as I said, you can still do this just fine in C++ or Java. I think that people tend to place way too much importance on the first language we teach students. What matters far more is the quality of the teaching itself, and the relevance and logical progression of the projects the students have to solve.
The problem is that a High School semester is really too short compared to how long it takes to learn C++, C++ is just too big a language. I ended up thinking I knew something about C++, when I really didn't.
And the hello world program for C++ is just as bad as the one for Java, in its own way. You're writing 'cout << "Hello World"' but how long will it be before you teach the students about operator overloading?
Note that I agree with you, in that I would rather use Python, or even Scheme. But I think language choice accounts for, say, a 5% impact, while the boring stuff (how much the teacher cares, how patient the teacher is, how good they are at explaining concepts, the quality of the projects - standard teaching issues) accounts for the rest.
In terms of preparing students for a career in programming I agree with you, the choice of first language doesn't matter much. But if a student is going to take a single semester in High School and never take another programming course, its far better that they end learning to write mediocre Python than bad C++.
I think it matters more than you give it credit. Michigan State did an experiment where they replaced one of the Intro to CS classes (which were formally in C++) with Python. The result they found is that for people who went on to CSII (in C++), they did just as well; but for people who were non-CS majors, a) they did significantly better than non-CS majors starting with C++, and b) they were more likely to take more CS courses. So if you're someone already committed to programming or computer science, maybe it doesn't matter, but if you're trying to get your feet wet, it matters a great deal.
Neither of your claims is supported by either paper. Rather, they seem to support my claim: starting language isn't a predictor of success.
Conclusions from the first paper: When final exams were compared for a CS2 course
offered before the Python transition with a course after the
transition no statistical difference was found. The first CS2
course after the transition contained a mixture of Python-prepared and non-Python prepared students. There was
no statistical difference in the performance between those
two student groups.
Conclusions from the second paper: We conclude that starting students with Python has not
had a negative impact within a C++ based curriculum. It
would have been nice to conclude that the Python students
did better in these courses, but the evidence does not appear
to support that hypothesis.
With that said, I do agree with the authors that exposure to more languages, environments and tools is a good thing, and for that reason, I'd prefer using Python, then switching to C++.
But, as I said, you can still do this just fine in C++ or Java. I think that people tend to place way too much importance on the first language we teach students. What matters far more is the quality of the teaching itself, and the relevance and logical progression of the projects the students have to solve.