#40 Es una valoración personal. Ahora mismo no hay mucho elitismo en C++ y la referencia era más bien por lo cargado que está el lenguaje. Pero vamos, que si tú no ves elitismo en la comunidad de Haskell o de FP en general pues tampoco te voy a intentar convencer de lo contrario.
#52 En primer lugar habría que diferenciar entre el lenguaje, el ecosistema y la implementación o plataforma. Me estás vendiendo lo productivo que eres gracias al tooling y lo potencialmente escalables que son tus aplicaciones pero nada de eso es un resultado directo del lenguaje sino de las horas humanas que tiene la plataforma detrás.
Java es un lenguaje principalmente diseñado con el objetivo de eliminar costes, esto es, de crear una herramienta "obreril" rebajando la barrera de entrada y utilizando únicamente conceptos probados.
Citando a Gosling: "It was not an academic research project studying programming languags: Doing language research was actively an antigoal... Java is a blue collar language. It’s not PhD thesis material but a language for a job. Java feels very familiar to many different programmers because I had a very strong tendency to prefer things that had been used a lot over things that just sounded like a good idea."
Hasta ahí bien si te remontas a los tiempos en los que acabó destronando a C++ y superando a alternativas como SmallTalk o Eiffel, pero hoy por hoy empieza a mostrar sus años y es mejor dejarlo pasar.
Dices que es trivial aplicar conceptos de OOP en Java pero de ser así no existirían libros como GoF. Ser un lenguaje basado en clases no te convierte en un buen lenguaje de OOP. Perl y Common Lisp por ejemplo no lo son y librerías como Moose o CLOS están a años luz de lo que ofrece Java en ese sentido.
Me disgusta lo verborreico que es, el abuso de declaraciones en lugar de expresiones, el hecho de que no te quede otra que utilizar un IDE como workaround a su complejidad, el carecer de inferencia de tipado y obligarte a escribir cosas como Polla polla = new Polla(); o peor aún
FuckerFactory factory = Fornication.buildDefaultFuckerFactory();
Fucker fucker = factory.getFucker();
Set<ThingWithTitsThatHappensToBreathe<Women>> muhWomyn =
fucker.fuck(idiots.stream().filter(person ->
person.isFemale()).collect(Collectors.toList()));
Me disgusta la comunidad, lo extremadamente ñapas que pueden ser algunos desarrolladores copiando y pegando código de StackOverflow mientras se creen la hostia por haber aplicado el patrón del día para leer un puto fichero (aunque puedo admitir que esto sea más bien una asociación correlacionada con el éxito del lenguaje), la tendencia de tener que escribir absolutamente todo en Java, el compulsivo exceso de ingeniería para soluciones en principio triviales, la pobre documentación de muchísimas librerías y especialmente la prevalencia de cargo cult, donde se siguen ciegamente "best practices" de ciertos gurús sin ser capaz luego de articular la razón por la que se hace X.
Hay gente a la que le gusta Java, pero suelen ser los típicos que no han tenido tiempo o ganas de experimentar con otras alternativas, han invertido demasiado en la plataforma o directamente no les queda otra que ganarse el pan con ello y sufren síndrome de Estocolmo.
Tiene cosas buenas, como IDEs excelentes, los sistemas de monitorización más avanzados, librerías y frameworks como Quasar y DropWizard que son una delicia, máquinas virtuales como HotSpot o Zing que barren a la competencia... pero si te fijas nada de ello tiene que ver con Java, el lenguaje.
Soy pragmático y a día de hoy me dan a elegir entre Java, Haskell o C++ para algún proyecto eligiré Java siempre que sea posible pero no por ello lo voy a considerar buen lenguaje. Y más existiendo cosas como Clojure, Kotlin e implementaciones de OCaml para la JVM.