Espero que te tomes a bien mis comentarios compañero.
No soy de los que se ofenden por la existencia de opiniones contrarias a la propia, ni tampoco por que se defiendan esas opiniones, si se hace desde el respeto, que es como creo que lo hemos estado haciendo. A mi me gusta debatir y hacerlo de forma civilizada, y parte necesaria de eso es la diversidad de puntos de vista. Sucede, y me consta, que mucha gente empieza con descalificaciones o a ofenderse en cuanto se les lleva la contraria una o dos veces. No es mi caso, no te preocupes
Estoy de acuerdo que seguramente sea por alguna de sus ventajas, también como anteriormente mencionamos, el no ser tan propenso a errores al descargar el trabajo de bajo nivel reduciendo el número de fallos, pero, ¿sacrificamos rendimiento por esto? ¿No es más útil y mejor que el desarrollador haga el trabajo como es debido?
Pareces nuevo compañero, y te lo digo desde el respeto. A día de hoy es más barato comprar hierro (ordenadores mejores, servidores más potentes) que hora de trabajo de desarrollador. Por lo tanto, cualquier herramienta que aumente la productividad, aunque sea a costa de verse obligados a meter más hierro, es bienvenida en las empresas.
En general sí hay disposición a sacrificar rendimiento por ello. Una prueba la tienes en la cantidad de software empresarial que está escrito y se está escribiendo en Java y no en C/C++. Si el rendimiento no es un punto clave, normalmente la decisión se inclina hacia Java.
Principalmente, porque
es más productivo y la habilidad que se requiere en el programador para hacer un trabajo decente
es menor que con C/C++. En otras palabras: hay más gente aceptablemente buena con Java que con C/C++.
Por supuesto, que el programador (y el analista, y el arquitecto, etc) haga bien su trabajo no es tampoco un requisito indispensable. Las empresas buscan, en general y exceptuando las startups milmillonarias de Silicon Valley, a ingenieros "buenos", pero no a "los mejores", que salen mucho más caros. Depende mucho de la cultura organizativa, pero no siempre importa tanto hacer las cosas de "la forma correcta", ni de "la mejor manera posible". Importa hacerlo lo suficientemente bien, sin más, y en general.
Y para decir esto me baso en mi experiencia en empresas. Las calidad importa mientras sea un impedimento para conseguir los objetivos de negocio. Una vez cumplidos éstos, la calidad pasa a un segundo plano.
java tiene ciertas limitaciones bastante gordas, como por ejemplo, el no poder pasar varias variables de retorno en una función y teniendo que hacer un Array para ello
¿Y los otros mil lenguajes que no ofrecen esa posibilidad? No puede ser una limitación "bastante gorda". De hecho, que eso suponga un problema "bastante gordo" en tu desarrollo responde más a cuestiones de falta de diseño o arquitectura deficiente que a una cualidad/"deficiencia" del lenguaje.
¿Necesitas retornar varios tipos primitivos en un método? A lo mejor no estás respetando los principios
SOLID del diseño orientado a objetos, o a lo mejor estás intentando realizar programación estructurada en un entorno principalmente orientado a objetos, lo que de nuevo sería una carencia por tu parte y no por el lenguaje.
Que eso se utilice principalmente en videojuegos es un argumento muy general, ya que los videojuegos principalmente se desarrollan con C++ que sí permite eso. Es como cuestionar que mi coche con motor de gasolina no admite combustible diésel cuando los profesionales del transporte (camiones, furgones grandes) utilizan este combustible... A lo mejor es que no estás planteando bien comprarte un coche gasolina si lo que necesitas es un motor diésel.
En este caso, es lo mismo. Quizá no estás planteando bien tu diseño. Yo también me he encontrado con esa limitación en otros lenguajes (PHP, Java, C#). En absolutamente todos los casos el problema no era que no pudiera retornar 2 valores, sino que no estaba respetando los principios del buen diseño de software. En esos casos, retornar 2 valores sí hubiera sido una ñapa para solucionar mis carencias como arquitecto.