Java as a first language.
C and C++ may have additional uses as machine/assembly level programming languages that Java does not intend to be.
Java surpasses C and C++ in its capability and ease to build desktop, webbased and mobile applications. Someone who knows Java does not have to go back to C or C++ because Java is a more refined language. (Expertise in C or C++ would be required in tasks that requires programming at a level that Java does not get down to, but that is besides the point made here)
Why would someone start on his learning path with C or C++ ???
When Java was first introduced, most of those who signed up to learn Java knew C or C++, so the teachers were addressing a class of C and C++ experts and began an introduction to Java by talking about what Java has that C and C++ does not have and by explaining the Java's refinements over C and C++.
This assumption of prior exposure to C and C++ is still prevalent among Java teachers. Most of the Java courses, even at the introdutory level, get into a comparision mode, and in this "introduction" the student is assumed to be familiar with C and C++.
Is there an unwritten convention among programming students to begin their journey as students with C ? Is it required ?
This gets the students into a sequence of learning C, then unlearning parts of C inorder to learn Java ...
Why wouldn't the Java learning programs have an all new approach - Teach Java as a first language ?
Apart from this unwanted assumption about prior exposure to C and C++, teachers and course designers make another wrong assumption. That the student is already exposed to Java applets and the end applications that would result from programming. So the approach is more like teaching a kid in the kintergarden the formula to calculate the area of a triangle, even before the kid is shown a triangle. It becomes difficult for the kid to comprehend what is taught.
Why wouldn't the teachers begin by giving a tour of the Java applets, Java servlets, Java Games, Java applications before defining objects and methods ? Sort of beginning with the final picture...