Perdón. Qué lenguajes de programación conocés / usaste profesionalmente?
La única gente que niega que java es un lenguaje antiguo y que se quedó en el tiempo es la que no conoce ningún lenguaje de programación moderno.
Con todo respeto, es ridícula la afirmación de que aquellos que optamos por lenguajes modernos es porque "no profundizamos". Esta idea es completamente falaz y demuestra una enorme falta de experiencia y conocimiento en lenguajes de programación. De hecho, se podría afirmar que aquellos que conocen o usan regularmente lenguajes modernos están VARIOS pasos más arriba en términos de comprender las abstracciones que provee un determinado lenguaje. Ejemplo concreto: una persona con el marco de referencia de java no puede entender lo que ocurre detrás de una expresión de LINQ en C#, mientras que un programador que conoce C# claramente entiende TODO lo que ocurre detras de java, porque java es una mera imitación malograda de lo que era C# hace 10 años.
Con respecto a Android: No solo java es un pésimo lenguaje para desarrollo de aplicaciones cliente, no teniendo ni siquiera properties, ni punteros de funcion, lo que lo hace totalmente inadecuado, excesivamente complicado, tedioso y poco productivo, sino que además hay un juicio todavía en proceso entre Google y oracle por el uso de java en Android (lo que echa por tierra la afirmación de que "java es libre"), y con esto hay un terrible impacto negativo en la habilidad de Google para proveer una implementación actualizada de java en Android, razón por la cual Android todavía usa una versión de java que es todavía más patética y retardada que la versión real.
Con respecto a esta frase:
la sintaxis de Java te permite crear, profundizar en el código, saber como nace un método y el porque de su ejecución.
Eso es una generalidad, aplicable a casi cualquier lenguaje. No veo de qué forma esto sería un argumento a favor de java. De hecho como dije antes, java es un pésimo lenguaje para tener como marco de referencia absoluto. Un programador C# entiende todo lo que sucede detrás de java, y el por qué de las cosas, pero un programador java con un marco de referencia basado SOLAMENTE en java (que no conoce lenguajes modernos) no puede entender lo que sucede detrás de características avanzadas de otros lenguajes como LINQ, async/await, o cosas más avanzadas de lenguajes funcionales como F#, como pattern matching, computation expressions, ADTs, Type Providers, etc.
Con respecto a esta frase:
.¿Por que es tan extenso realizar esta tarea en este lenguaje y en el lenguaje "X" es mas rápido y sencillo? OK...Modifica ese código para realice una función diferente...
Esto también es una falacia. El TERRIBLEMENTE LIMITADO marco de referencia y capacidad de abstracción en java hace que sea MAS DIFICIL, y no mas facil, adaptar o extender el código. Por esta razon existen en java cientos de frameworks monstruosos como Spring o J2EE, mientras que en otros lenguajes, la capacidad de componer el código mediante simples funciones obvia la necesidad de toda esa parafernalia grotesca. Te recomiendo leer el articulo "Kingdom of Nouns" que anda dando vueltas en internet, para comprender esto.
Con respecto a esta frase:
java permite patrones de diseño
java no "permite", sino que REQUIERE patrones de diseño. Veo que los programadores java en general son fanáticos de los patrones de diseño. Por todos lados veo Visitor Pattern, Command Pattern, Builder Pattern, y un sin fin de prácticas cuya única finalidad es COMPENSAR LAS LIMITACIONES DEL LENGUAJE. En C# por ejemplo nadie usa Visitor Pattern, ni Command Pattern, porque estos se reemplazan con simples funciones, y nadie usa Bulder Pattern, porque existen Extension Methods y Object Initialization Syntax, que son características PROPIAS del lenguaje que hacen completamente innecesario y hasta indeseado el uso de esos patrones de diseño.
Por supuesto que nada de esto significa de ninguna forma que los que usamos C# "no entendamos" por qué se hacen las cosas de una determinada forma, sino todo lo contrario. Nuestro marco de referencia es muchísimo más amplio que el de alguien que sólo conoce java, y por eso podemos usar constructos y características del lenguaje que son mucho más modernas y complejas que lo que ofrece java.
metodologías agiles
Esto es una completa falacia, ya que el lenguaje de programación de ninguna manera limita ni facilita el uso de metodologías ágiles como Scrum, sino que las mismas son una cuestión organizativa de un equipo de desarrollo y nada tienen que ver con las tecnologías o lenguajes que se usen.
seguridad
La unica seguridad que brinda java es "seguro que hay vulnerabilidades". En el HOME PAGE de java.com, el gobierno de USA OBLIGO a oracle a poner ARRIBA DE TODO un link que redirige a una página que explica cuales son los múltiples riesgos que existen por no actualizar java, e incluso habiendolo actualizado las vulnerabilidades persisten si no se desinstalan las versiones viejas. Fijate que en ningún lugar en http://dot.net ni en http://asp.net existe ningun cartel que diga "Cuidado, si usted usa esta plataforma se expone a vulnerabilidades de seguridad", ni nada por el estilo.
flexibilidad
No veo qué flexibilidad puede tener un lenguaje que recién hace 1 año tiene funciones, que no tiene generics de verdad, y que recién en 2020 va a tener value types. Ni hablemos de cosas más avanzadas como ADTs, algo como LINQ o async/await.
multiplataforma
Como dije en otro comentario, java NO corre en iOS, mientras que C# si. Con lo cual este argumento es (como minimo) cuestionable. En cualquier caso, java es IGUAL O MENOS multiplataforma que otros lenguajes muchísimo más modernos. E incluso si de hecho esto fuera cierto, en cualquier caso es una característica de la JVM como plataforma y no del lenguaje java, con lo cual uno podría afirmar que es muchísimo mejor usar un lenguaje moderno como Kotlin sobre la JVM que usar java.
orden
¿Qué significa esto? No le encuentro sentido. En la práctica, el uso de java en proyectos reales implica una tonelada de AOP y soluciones "mágicas" basadas en @annotations. No veo qué clase de "orden" pueda significar usar un lenguaje tan limitado que requiere modificar el resultado del compilador con herramientas externas para poder usarse.
optimización
El proyecto XobotOS demuestra que las múltiples deficiencias del lenguaje java como la falta de Value Types y generics de verdad atrasan terriblemente y generan un desperdicio enorme de recursos tanto de CPU como de RAM comparado con lenguajes modernos. No veo donde está la "optimización".
"Escríbelo una vez, ejecútalo en cualquier lugar".
COMPLETAMENTE FALSO. java NO corre en iOS y NO existe (por ejemplo) ningún framework en java similar a Xamarin.Forms, que permite crear GUIs NATIVAS para 3 plataformas con un mismo código en C# y XAML.
Pero no te voy a decir Java es superior a este otro porque
Porque claramente no lo es desde ningún punto de vista objetivo. Si uno aprecia la JVM como plataforma tranquilamente puede usar un lenguaje moderno como Kotlin para aprovechar esta plataforma y sus ventajas. Caso contrario uno puede usar cualquier lenguaje moderno como C#, F#, o incluso TypeScript con NodeJS. Todos estos son terriblemente más modernos y productivos que java.
Espero sirva mi humilde opinión
Para que una opinión sirva, en lo posible no debe ser parcial ni desinformada.