¿Por qué Java es tan popular?

Me refiero a programas para PC, no a juegos para móviles u otros usos.

La principal ventaja es que la Máquina Virtual de Java (JVM) está disponible para un montón de Sistemas Operativos.

Esto está bien, ya que se puede crear un programa multiplataforma.

Pero... Para programas para PC, ¿por qué se elige Java si es TERRIBLEMENTE lento?

El hecho de que corra sobre la JVM hace los programas lentísimos.
Como por ejemplo OpenOffice, Azureus, Mercury (no lo he probado, pero siempre leo que su principal desventaja es el consumo de CPU), etc.

Por qué no es tan popular por ejemplo Python? Aunque sea bastante informal, creo que la diferencia de recursos es muy grande...
Es decir... Java como tiene una JVM es lento. Python como no la tiene (???????) es rápido.

¿Por qué no escribes cosas con sentido?

- ferdy
Te vuelven a fallar las formas por segunda vez en minutos Ferdy.

Ichigo, explícate mejor. ¿Te refieres a que ya que tienes que añadir el overhead de ser un lenguaje semi interpretado es mejor optar por Python que por Java? ¿O a lo que ha entendido Ferdy y pensabas que Python no tenía una "máquina virtual" entre medias?
Es fácil. La gente tiene esa idea de que Java es lento (no es que sea una idea particularmente infundada...) y de que python es rápido (esto si que no se de dónde se lo sacan).

Desde siempre se le echó en cara a Java que no alcanzaría la velocidad de lenguajes "compilados" tradicionales porque compila a un lenguaje intermedio. Como eso era difícil de entender y explicar, el personal dejó el mito de "Java es lento por la Máquina Virtual". Para el que no sabe de qué hablas.... parece un buen argumento.

La historia es que Java y Python son dos cosas completamente distintas (y pensadas para distintos propósitos). Es más, en MUCHAS cosas, Java es infinitamente más rápido que Python; sin embargo eso irrelevante en la vida real (donde es más fácil comprar equipos más caros si te puedes ahorrar tiempo de desarrollo).

Oh, se me olvidaba, y luego está esto de que detrás de Java está 'una gran empresa' y eso a las empresas les pone. Y el tema del soporte de la comunidad y tal... les pone mucho menos.

- ferdy
Y se te olvida que si tu empresa desarrolla en Java, y tus programadores se largan a mitad de proyecto porque los explotas, te es más fácil encontrar carne de cañón.
Exacto.... eso es consecuencia de lo de antes.....

Otra cosa que se me olvidaba, Sun tiene certificaciones molonas, Python no. Las certificaciones molonas le ponen a las empresas... la gente que aprende lenguajes por su cuenta porque les gusta programar, no tanto.

- ferdy
la verdad yo siempre me he preguntado lo mismo y la única respuesta que encontraba era la portabilidad, pero lo que decís de la programación y las certs es 100% verdad.
Desde mi punto de vista profesional, existen varios servidores de aplicaciones (web) basados en java que son auténticos monstruos en lo que recursos se refiere pero en el mundo *X no tienes muchas alternativas (php, cgi y jsp) y tomcat a los administradores nos lo pone facilito (imagino que a los programadores tb), pones el autodeploy, el war y ... listo :P
Python es mucho más portable que Java... eso es solo un mito.

- ferdy
Ferdy escribió:Python es mucho más portable que Java... eso es solo un mito.

- ferdy


El problema es que muchos SO tipicos en servidores no tienen interprete de Python instalado por defecto. De java si.

Para todo lo demás, perl [looco]
Txukie escribió:
El problema es que muchos SO tipicos en servidores no tienen interprete de Python instalado por defecto. De java si.

Para todo lo demás, perl [looco]

Pues no se qué decirte. Lo que son distros Linux yo diría que la mayor parte tienen instalado el intérprete de Python y no java y mucho menos javac.

De hecho Python está desplazando cada vez más a los shell scripts y a Perl para la administración del sistema.


Desde mi punto de vista profesional, existen varios servidores de aplicaciones (web) basados en java que son auténticos monstruos en lo que recursos se refiere pero en el mundo *X no tienes muchas alternativas (php, cgi y jsp) y tomcat a los administradores nos lo pone facilito (imagino que a los programadores tb), pones el autodeploy, el war y ... listo smile_:P

Échale un vistazo a Django. O ya que nos ponemos a Ruby on Rails para Ruby.
zootropo escribió:Pues no se qué decirte. Lo que son distros Linux yo diría que la mayor parte tienen instalado el intérprete de Python y no java y mucho menos javac.

De hecho Python está desplazando cada vez más a los shell scripts y a Perl para la administración del sistema.



Hablaba de Unixes
A veces tengo la impresión de que java es tan popular porque tiene dinero para serlo.

En mi universidad por ejemplo, en primer curso se imparten 2 asignaturas de programación.

La primera era programación básica en C, sobretodo aprender las estructuras de datos, que es un array, como se acceden a los elementos de un array, los if, los for, los while, algoritmos de ordenación básicos etc, vamos, familiarizarte con un lenguaje de programación imperativa.

La segunda era programación en C++ (vamos, familiarizarte con la programación orientada a objetos).

Un año de buenas a primeras Sun empezó a dar conferencias en mi universidad.

Al año siguiente la asignatura de C++ fue sustituida por java.

Dos años mas tarde las dos programaciones son en java.

¿Que coño está pasando?
Txukie escribió:

Hablaba de Unixes

Lo se. Por eso he especificado "Lo que son distros Linux", implicando que hay más cosas.

De todas formas:
IDC figures suggest that Windows now has about 70% x86 server market share, Linux about 20%, Unix less than 10% (...)

In the case of Linux, a substantial proportion (it's hard to say much) of server deployments which are not included in IDC figures are on recycled computers, vanilla boxes without any operating system pre-installed and in virtual environments where Linux is a guest operating system.
Ferdy escribió:Es decir... Java como tiene una JVM es lento. Python como no la tiene (???????) es rápido.


Yo no he dicho eso. Tal vez no me he explicado bien. Los tiros van por el hecho de que en Python se usa un intérprete y Java genera un Byte Code que la JVM interpreta.

No sabré tanto como tú, pero teniendo eso en cuenta y viendo que LA MAYORÍA de programas que he usado en Java son LENTOS (como he dicho antes, Azureus, OpenOffice...) llego a la conclusión que el lenguaje de programación usado tendrá ALGO que ver.

Y he puesto Java como ejemplo, como podría haber dicho TCL/TK. A cualquier persona le preguntas cuál es el motivo de porqué aMSN es lento y la respuesta es la misma: está escrito en TCL/TK.

Ferdy escribió:¿Por qué no escribes cosas con sentido?


Puedes decir de muchas maneras las cosas... Veo que vas un poco 'sobrado' por este foro (sin ofender), pero veo que no es la primera vez que tienes una salida así.

"La modestia es el complemento de la sabiduría."

zootropo escribió:Ichigo,
explícate mejor. ¿Te refieres a que ya que tienes que añadir el
overhead de ser un lenguaje semi interpretado es mejor optar por Python
que por Java? ¿O a lo que ha entendido Ferdy y pensabas que Python no
tenía una "máquina virtual" entre medias?


No he entendido lo del overhead. Pero bueno, lo que me refería era a lo del Intérprete.

Ferdy escribió:Es fácil. La gente tiene esa idea de que Java es lento (no
es que sea una idea particularmente infundada...) y de que python es
rápido (esto si que no se de dónde se lo sacan).


He puesto el ejemplo de Python no porque 'se crea popularmente' que es rápido, podría haber puesto muchos otros, sinó porque tiene algunas similitudes (CREO que es multiplataforma, CREO que te puede gestionar la memoria automáticamente etc.)
En Python también se genera bytecode, Ichigo. Son los archivos .pyc y .pyo.


overhead = gasto extra.
Yo no he dicho eso. Tal vez no me he explicado bien. Los tiros van por el hecho de que en Python se usa un intérprete y Java genera un Byte Code que la JVM interpreta.


Ehm... date cuenta de que un intérprete es potencialmente más lento que una máquina virtual. El compilador que genera el bytecode, tiene opciones de hacer optimizaciones estáticas.

No sabré tanto como tú, pero teniendo eso en cuenta y viendo que LA MAYORÍA de programas que he usado en Java son LENTOS (como he dicho antes, Azureus, OpenOffice...) llego a la conclusión que el lenguaje de programación usado tendrá ALGO que ver.


Esa es una mala conclusión. Te puede llevar a absurdos como "El código de los programas escritos en python me parece una mierda; ergo los programadores python son idiotas.". Se puede hacer software lento en Java, y se puede hacer buen software.

Y he puesto Java como ejemplo, como podría haber dicho TCL/TK. A cualquier persona le preguntas cuál es el motivo de porqué aMSN es lento y la respuesta es la misma: está escrito en TCL/TK.


El hecho de que lo diga 'mucha gente' no lo hace verdad... (dicho sea de paso, no conozco el tema de aMSN hace mucho que no lo uso).

- ferdy
basicamente, yo creo que java triunfa por lo que ya habeis dicho: Es facilmente mantenible, lo que conlleva que los programadores de un proyecto no son piezas irremplazables.
Lento? No lo se a ciencia cierta, pero me atreveria a decir que das muchas vueltas para hacer cualquier cosa, si pretendes hacer algo mantenible y en poco tiempo.
De lo poco que he visto de java... por ejemplo, obviamente, es mas costoso llamar a una funcion de la clase para cambiar el valor de una variable, que acceder a una variable publica y cambiarla directamente.
Pero el hecho de tener que acceder por una funcion, te obliga a no hacer guarrerias, por tanto, eso repercute que en un entorno de muchos programadores, hayan menos fallos.

De todas formas, no se podia compilar java para cierta arquitectura, pasando del tema de portabilidad y ganando rendimiento?

Igualmente, si no estoy equivocado, python se puede compilar para que use la maquina virtual de java, y creo que tb en C.
Por poderse.... se podría. Nadie te impide compilar Java en ensamblador. No se si existe un compilador que lo haga o te tocaría escribirte uno.

- ferdy
Los ejemplos que habeis puesto de "lentitud" en java, a mi me funcionan en un ordenador de hace unos cuantos años, un pentium III. Yo creo que no serán tan lentos entonces.

Y Python si es lento y pesado, no se si tanto o más que java, pero lo veo más sencillo.
Hombre, decir que OpenOffice es lento, pues sí, pero hay que tener en cuenta la 'magnitud del proyecto'.

Para mi lo bueno de Java y por orden es:

- Orientado a objetos.

- Unas librerías inmensas, con implementaciones para la mayoria de tareas y estructuras de datos rutinarias, que aceleran la creación de código una enormidad.

- Gestión automática de memoria.

- Muchisima documentación

- Multiplataforma

Respecto a la rapidez, bajo mi punto de vista afecta mas el diseño e implementación que hagas de la aplicación que java en sí mismo, pero vamos, esta claro que java no es c. Por eso cada uno es bueno para cada cosa

Salu2!
K. Ichigo escribió:Puedes decir de muchas maneras las cosas... Veo que vas un poco 'sobrado' por este foro (sin ofender), pero veo que no es la primera vez que tienes una salida así.


Ferdy sobrado?. Noooooo , para nada , por dios , como se te puede ocurrir una cosa asi?. Ni salidas de tono , ni meadas fuera del tiesto , por supuesto. No es que parezca que sus conocimientos le hagan creer que puede avasallar a quien pille por banda de cuando en cuando.

Para nada , vamos , para nada.
El problema de gcj es que de momento sólo soporta hasta la version 1.4. Yo lo necesito para la 6 arffffffff

Salu2!
shamus escribió:
Ferdy sobrado?. Noooooo , para nada , por dios , como se te puede ocurrir una cosa asi?. Ni salidas de tono , ni meadas fuera del tiesto , por supuesto. No es que parezca que sus conocimientos le hagan creer que puede avasallar a quien pille por banda de cuando en cuando.

Para nada , vamos , para nada.


Mear fuera del tiesto para criticar otra meada fuera de tiesto no te hace estar por encima en cuestión de ética.

Vamos, que buenas ganas tienes de buscar bronca.

Un saludo.
23 respuestas