O importante é o mérito das coisas, e o objetivo delas.
A linguagem C se tornou super popular por ser muito simples (comparada com assembly),
C, C++ veio para fazer sistemas operacionais para possibilitar que as pessoas usassem o computador.
O problema na época era ter um sistema independente do hardware pois comandos assembly
são diferentes dependendo do processador, etc.
Depois que resolveram o problema de ter sistemas operacionais independentes do hardware
surgiu outro problema, pois o primeiro foi solucionado muito bem criaram vários sistemas operacionais
DOS, Mac, Linux, Unix, etc.
Ah windows é um também…
Surge o problema de que os sofwares são dependentes de SO, e então surge o Java.
Orientação a Objetos não é um diferencial, pois a maior parte das linguagens são OO.
E (fugindo ao assunto: o padrão MVC é meio parecido com o paradigma estruturado onde dados e funções são tratados separadamente digo PARECIDO)
Tratamento de Threads, isso é um diferencial, mesmo dando para fazer em C, C++ (não tentem fazer em casa) não é nada prático.
Pontos fracos, em desktop consome muita memória, digo isso em relação a programas compilados e feitos com linguagens “ultrapassadas?”(Clipper Delph) os PDV de lojas normalmente usam micros também “ultrapassados?”, mas que dão conta do recado.
Mas porém Java poderá ser compilado por padrão (Alguém me disse que é possível, mas não default) pela JVM, ou seja, mantém a portabilidade e ganha performance.
A linguagem morre quando o dono mata Ex.: ASP.
Se o código é livre, não há donos ela não pode morrer por esse motivo.
Pode ocorrer uma substituição
se houver uma linguagem que faz TUDO o que a outra faz e mais alguma coisa relevante então de fato a antiga vai acabando.
Porém qual o motivo de alguém gerar uma linguagem toda do zero para fazer tudo o que a outra faz se a primeira é Livre?
Python foi feita para lecionar, por isso a identação do código é obrigatória.