18
Las 10 razones por las que odio Java
Canal RSS Retroenlace
Los que me conocen saben que siempre he ‘odiado’ Java, pero no es un ‘odio’ sin motivos, tengo mis razones que voy a enumerar, corriendo el riesgo de herir susceptibilidades de quienes les guste dicho lenguaje y sin intención alguna de entrar en discusiones estériles sobre cuál lenguaje es mejor. Obviamente Java es más que un lenguaje y es poderoso para entornos empresariales y móviles, sin embargo, sigue sin gustarme por las razones que enumero debajo (totalmente cuestionables, pero mías al fin).
Odio Java:
- Por su sintaxis innecesariamente compleja (Hola Mundo en Java vs. Hola mundo en Ruby)
- Por su tediosa estructura de librerías ( import sun.java.sucks.sometimes.*; )
- Por sus lentos e inútiles ‘applets’ (afortunadamente en desuso)
- Por su lentitud a la hora de ejecutar las aplicaciones (aunque ha mejorado con el tiempo). Por eso lo llamo "YA-va"
- Porque sin la ‘bendita’ máquina virtual su portabilidad no existe. (Y si no tengo la JVM a mano?)
- Por su lenta curva de aprendizaje, que demanda horas y horas de lectura para aprender a programar bien.
- Porque NO es adecuado para el desarrollo web (RoR es libre, más fácil, menos líneas de código, desarrollo rápido real)
- Porque NO es GPL (El lenguaje es GPL pero no las librerías necesarias para correr los programas).
- Por la obsesión de llamarlo todo con J (Java, JVM, JRE, JME, JSE, JDK, JBoss, J2EE, J2ME .. ) lo cual confunde, sin necesidad.
- Porque si decides usar Java, tendrás tantas cosas que aprender, que no tendrás tiempo de aprender ningún otro lenguaje.
Y aparentemente, no soy el único que piensa que Java no es el lenguaje ideal ni la 8va maravilla..
Robert B.K. Dewar y Edmond Schonberg, dos eminencias de la universidad de New York, consideran que la mediocridad de los nuevos ingenieros está directamente relacionada con la enseñanza de Java como primer lenguaje de programación.
"El conjunto de habilidades (de nuestras actuales prácticas educacionales) es insuficiente para la industria de software de hoy en día (en particular para propósitos de seguridad) (…)
"Los cursos de programación de Java no preparan a nuestros estudiantes para el primer curso en sistemas, mucho menos para otros más avanzados" (Vivalinux.com.ar)
Mi consejo para quienes aprenden a programar es que aprendan a usar un lenguaje de verdad verdad (C++, Ruby, Perl, Python son buenos ejemplos).. Luego lo demás será coser y cantar puesto que un buen programador, programa en cualquier lenguaje, en cualquier plataforma.
Artículos relacionados:
Java es el COBOL del siglo 21
Por qué Python?
Un video gracioso de Ruby on Rails vs. Java (en inglés)
Libros que debes leer si te decides por Java
Ingeniero en Informática.
José, aunque no me gusta Java principalmente por su lentitud y dependencia de Applets (yo desarrollo profesionalmente en C#), creo que no es correcto comparar Ruby o Python con C++.
De hecho, usar Ruby te lleva a ser mucho más olgazan en la programación que hacerlo en Java. Esos lenguajes son tan populares por ser muy rápidos de aprender pero limitados en el alcance de lo que puedas acceder sobre el sistema. Si hablas de portabilidad, ninguno como C++ (ANSI).
Rodney a las Ene 18, 08 @ 8:08 pm
No es por defender a Java, porque efectivamente tiene sus problemas, pero no es cierto que las librerías no sean GPL. Por lo menos la edición SE y ME son GPL (anunciado aqui)
Chiguire a las Ene 18, 08 @ 11:25 pm
Rodney: Tanto Ruby como Python, a parte de ser multiplataforma, tienen un amplio rango de posibles acciones sobre el sistema en general, a parte de tener una sintaxis clara y sencilla parecida al lenguaje humano, lo que facilita su aprendizaje y la comprensión de la programación como un proceso creativo, centrándonos más en resolver el problema del negocio que en resolver problemas asociados al lenguaje y/o la plataforma. Obviamente no tienen el mismo poder de C++, así como C++ no tiene el mismo poder de Assembler, pero eso ya es harina de otro costal.
Y la portabilidad de C++ es excelente (por eso los Sistemas Operativos se programan en C con rutinas en ASM entre otras cosas), pero la de Python y Ruby no se quedan atrás, siendo capaces de generar aplicaciones para cada plataforma (usando templates) que permiten olvidarnos de máquinas virtuales (YES!).
jrojas a las Ene 20, 08 @ 4:56 pm
Te recomendaria que leyeras antes de hablar. Quizas eres un programados VB. Java sus ventajas y desventajas, es por mucho el mejor al momento de crear aplicaciones empresariales, ademas de ser opcion preferible para moviles.
La verdad no es propio de un programador criticar un lenguajes solo por que no le gusta. Ninguna de tus razones tiene algo de “razon” y por razon me refiero a fundamentos.
Su sintaxis complicada? si C/C++ tienen un sintaxis muy facil claro (con entonacion ironica).
Jose Ayerdis a las Ene 20, 08 @ 7:05 pm
Ayerdis: Por mi carrera, créeme que tengo que leer libros y libros sobre lenguajes de programación (soy Profesor Universitario de entre otras materias, de Lenguajes de Programación), además de que sigo desarrollando sobretodo en entornos web y móviles más por gusto que por otra cosa.
No me considero un “programador” porque ser simplemente eso no me permitiría tener una visión holística del tema y me limitaría simplemente a defender al lenguaje que conozca. No pretendo ni mucho menos que nadie esté de acuerdo conmigo, simplemente enumero las razones por las que no me gusta dicho lenguaje y como dije en el post, cuestionables o no, son mis razones (y las de muchos otros).
Y con respecto a C++, no fue el único ejemplo que comenté, puedes ver que nombro a Ruby o Python, lenguajes poderosos pero con sintaxis más sencillas. Tal vez deberías leer tú sobre dichos lenguajes..
jrojas a las Ene 21, 08 @ 3:06 pm
Recuerdo haber visto la imagen de la pila de los libros de Java vs. la de Ruby en una charla de William Yanez. Quedé asombrado Más acombrado quedé cuado estaba aprendiendo Java y lo engorroso que puede llegar a ser crear aplicaciones simples…quizá no sea su propósito, pero no es el propósito de un lenguaje que se considera multipropósito ser eso, multipropósito. Con PERL se pueden lograr apliaciones iguales de robustas y variadas con sólo echar una buscadita en CPAN. Existe prácticamente algo para cada cosa, aparte claro está, de la gran comunidad de soporte y desarrolladores.
Héctor a las Ene 23, 08 @ 12:31 am
Si eres profesor universitario, al menos deberías tratar de esgrimir razones mas precisas, porque mucho de lo que dices allí es simplemente
paja.
Tediosa estructura de librerías? WTF?
Lentos e inútiles Applets? Seguro que utilizando puro Ajax puedes hacer lo mismo que hacen los Applets… chequea processing.org por ejemplo
Decir, por ejemplo, que no es adecuado para desarrollo Web?? Ebay usa Java!
Que no hay portabilidad si no tienes JVM? Claro! y en C como haces si no tienes compilador?
Lentitud? Es por razón de cargar en memoria la máquina virtual, luego utiliza optimización en ejecución… No me digas ahora que Ruby es super rapidísimo! Sabes bien que ese es un mal de los lenguajes interpretados.
Si es GPL, aunque te duela en el alma… no repartas FUD.
Por la obsesión de llamar las cosas J? WTF? Dile a Stallman que te da ladilla que le meta GNU a todo lo que hace…
Y claro que si da tiempo de aprender otras vainas, sólo los mediocres se quedan con un sólo lenguaje.
Marcos Gonzalez a las Ene 29, 08 @ 5:25 pm
Marcos: Al que parece que le dolió en el alma fue a ti xD
Y ladilla me da responderte, de pana.
En lo que sí probablemente tengas razón es que no conozco Java a fondo, puesto que desde pregrado hasta postgrado, siempre que por obligación me ha tocado manejarlo, se me ha hecho precisamente intragable. Pero como dicen los franceses, “cada quien es libre de comerse su propia mier..”, por lo que asumo que “Java es lo que gusta” y estás en tu derecho de tatuartelo en el trasero si te provoca, en realidad a mi no me interesa saberlo.
Y es cierto, sólo los mediocres se quedan en un sólo lenguaje, pero aún más mediocre es no tener educación ni respeto, lamentablemente no hay lenguaje de programación que enseñe eso..
jrojas a las Ene 29, 08 @ 7:29 pm
Por cierto, te respondo punto por punto (aunque me sigue dando ladilla)
1. Cuando digo “tediosa estructura de librerias”, que no entiendes? “tediosa”, “estructura” o “librería” ?
2. De nada sirve un “applet” que haga café y me lave la ropa si debo esperar 3 horas a que cargue.
3. Has desarrollado usando Ruby on Rails? (si lo hubieras hecho, ni compararías)
4. Ebay usa Java. Google usa Python. Quién tiene más visitas?
5. Ruby es lento? Has usado Ruby? Python? C++? (El problema no es que sea interpretado, Java es lento por otras razones varias).
6. Es GPL? el 100% ? Estás seguro? Respuesta definitiva? Ser GPL sólo lo convierte (para mí) en un pupú GPL.
7. Léete “El Paradigma”. Luego hablamos sobre nombres de aplicaciones. (Aquí Microsoft es el maestro)
8. Si te da tiempo de aprender otras cosas, preocúpate, es que no estas aprendiendo Java a fondo xDDDDDDDDDDDDDD
jrojas a las Ene 29, 08 @ 7:40 pm
No soy un acérrimo seguir de Java, pero creo que algunos de tus argumentos no son correctos.
La orientación de Java no es la misma que la de Ruby. Ruby te da muchas cosas hechas y posiblemente es más fácil de programar al principio, en cambio Java te obliga a ser mucho más ordenado. No creo que sea buena comparación mirar un mensaje por su hola mundo.
Yo creo que la estructura de librerías de Java es bastante buena. Puede resultar algo tediosa, sí, pero porque tiene miles de librerías. Este problema se minimiza con cualquier ide que tenga auto completado.
No creo que un Applet sea inútil de por sí. Hay aplicaciones inútiles y útiles en cualquier lenguaje y formato.
Java no es realmente tan lento. Obviamente ejecutarse en una máquina virtual tiene sus penalizaciones pero prácticamente se notan al cargar esta misma. Una vez cargada en general es bastante rápido. Existen varios benchmarks pululando por ahí en la que la ejecución de algunos algoritmos típicos tardan prácticamente lo mismo en la versión C que en la de Java. También puedes mirar la página del Jake 2 y ver como el rendimiento del Quake 2 en Java es prácticamente el mismo que en la versión C.
Posiblmente Java no sea ideal para pequeños y medianos proyectos webs. Pero para aplicaciones web de magnitud considerable puede resultar interesante y apuesto que en esos casos es muchísimo más rápido que RoR.
8. Ya lo han comentado por ahí, que sí tiene librerías GPL.
9. No creo que tenga mucho sentido criticar un lenguaje por los nombres de sus librerías. En php también hay muchas aplicaciones llamadas phpmailer, phpmyadmin, phpbb, etc… El hecho de que se llamen así te puede dar una idea rápida de que está hecho en Java
10. Java es muy sencillo de aprender, su sintaxis es comparte muchos detalles con C, php, perl, entre otros, y si ya tienes experiencia previa programando no te costará mucho adaptarte. Otra cosa son sus Frameworks, librerías, entornos de desarrollo, etc. Ahí sí que hay algunas muy complejas y difíciles de aprender. Si tomamos como válido este argumento, C y C++ también puede resultar tan complicado que no te deje tiempo para aprender otras cosas, ya que tendrías miles de bibliotecas que aprender.
Nenillo a las Feb 1, 08 @ 10:03 am
Nenillo: Intervenciones tan bien justificadas y tan educadas dan gusto. Tienes mucha razón en casi todo. No pretendí hacer una revisión técnica de Java, simplemente enumerar las razones por las que prefiero otros lenguajes. Y por tanto, son subjetividades que dependen del cristal con que se miren.
Coincido casi en todo contigo, sobretodo en el hecho que el lenguaje (a pesar de su sintaxis) es facil de aprender, lo complicado es los frameworks, librerias y entornos de desarrollo, que enredan la cosa. Y para mí ese hecho como el hecho que sus nombres no den idea de para que sirve cada cosa, hacen complicado ganar adeptos fácilmente (al menos para quienes programamos por hobby). Y sí, C y C++ tienen una sintaxis tediosa también, precisamente por eso me gusta Ruby aunque tienes razón en el hecho que son 2 cosas bastante diferentes y dificiles de comparar punto por punto, sobretodo por el hecho que Java tiene mucho más tiempo en el mercado que Ruby y Ruby on Rails.
Sin embargo, si tuviese que hacer una aplicación de escritorio seguiría
escogiendo Python (con Qt) o Ruby (con Qt) y para aplicaciones web PHP + Symphony o Ruby on Rails. Java, jamás!
Moraleja: En los lenguajes como en la vida real, entre gustos y colores..
jrojas a las Feb 1, 08 @ 10:38 am
si tuvieses que hacer una aplicacion de escritorio con acceso a dispositivos tales como lectores de codigo de barra, webcams, scanners, manejo de imagenes, ademas de necesidad de acceso de datos externos en excel, word, etc?usarias Ruby con QT???
drqwerty a las Mar 6, 08 @ 9:32 pm
Hola dr. teclado:
Si tuviese que hacer una aplicación que maneje todos esos dispositivos, estaría programando un sistema operativo!
Hablando en serio, lectores de código de barras, webcams, scanners y demás, deben tener sus propios drivers para que el sistema operativo los reconozca, por tanto no es necesario programar a bajo nivel con un lenguaje como Assembler o Lenguaje C/C++. En ese caso, programaría con PyQt, que es un ‘binding’ de Qt para Python, otro lenguaje que mientras más lo uso, más me gusta..
Sin embargo, en caso que se deba programar también el driver, lo ideal es usar C++ (por su facilidad de uso comparado con lenguaje ensamblador) y lenguaje ensamblador en aquellas partes que lenguaje C/C++ se vea limitado en el acceso a las funciones del hardware.
jrojas a las Mar 9, 08 @ 3:28 am
un reto: con PyQT crea una pantalla que muestre el contenido de una webcam cuando tardarias? eso en java tomaria unos 10 minutos, a lo que voy es que todos los lenguajes son buenos cuando te ayudan a hacer alguna cosa u otra, pero cada uno de ellos tiene sus limites hay cosas que se pueden hacer en unos y en otros no. si es por sintaxis entonces me acuerdo del viejo Qbasic que para hacer el hola munto tambien era siguiente comando: print “hola mundo”, no necesitabas declarar tipos, etc y la gente con el tiempo decia que era una porqueria de lenguaje …
drqwerty a las Mar 11, 08 @ 1:40 pm
drquerty: En Java hay librerías para todo, es una de sus fortalezas, pero usarlas te ayuda a aprender a programar? NO. Igual si tu tuvieras que programarlo, tampoco lo harías en 10 minutos, por tanto tendríamos que comparar quien tiene mejores librerías y el ganador sería PERL o C, no Java. Pero en fin, no trato de convencer a nadie que Java es malo o bueno, seguro tiene sus puntos fuertes, pero en lo que a mí respecta, lo sigo detestando. Es más, me produce menos repulsión Windows, con eso te digo todo.
Siendo objetivo, si tuviese que programar tu aplicación para webcam, la buscaría en los repositorios de debian, seguro alguien ya la programó. Y me tomaría 15 segundos
El problema no es quien es más rápido programando, el problema es que si tuviese sólo 2 opciones como Java y PyQt, el tiempo q me llevaría aprender Java, su sintaxis, las 32 mil capas del J2EE, los significados de los J* sería claramente superior al tiempo que me llevaría aprender Python, Qt y desarrollar la aplicación desde cero.
Moraleja: Insistes en defender a Java pero apuesto que nunca has programado en Ruby ni en Python.. así, ninguna comparación es objetiva.
Ah y meter Qbasic en la comparación no vale la pena responderlo, primero, nunca lo usé (no soy tan viejo) y segundo, es un lenguaje de la década de los 80, no es comparable en nada a los lenguajes modernos como Java, Python o Ruby. En fin..
jrojas a las Mar 11, 08 @ 2:09 pm
he programado en python, ruby, anteriormente con PHP y un poco de PHP con GTK, siempre encuentro lo mismo, “los repositorios de debian”, “es mejor PERL”, lo de siempre, una cosa es imaginar que se puede hacer y otra cosa es hacerlo, si quisieses una aplicacion empresarial, tendrias que recoger tus cosas y solo decir “no puedo” … o simplemente cambiar a JAVA … o conformarte con hacer cosillas simples imaginando que tienes todo el poder de una computadora a tu disposicion … una ultima cosa; cuando tienes un trabajo que cuidar el tiempo siempre es un factor fundamental en el desarrollo de software
drqwerty a las Mar 11, 08 @ 7:09 pm
[ironia]
Oh si gran drqwerty.. Java es la luz, la verdad y la vida, el único lenguaje en el mundo, el único con que se pueden hacer aplicaciones empresariales. Antes de él, nunca hubo aplicaciones empresariales. Es el más abierto, más simple de aprender, de mejor sintaxis y el más rápido. Es imperativo, funcional, declarativo, todo a la vez. Puedo desarrollar para escritorio y para web y cualquier plataforma de sistema operativo y hardware. En fin, no existe otra cosa más allá de Java. Java tu Dios y el único Dios que todos debemos reconocer. Confieso que he pecado drqwerty.
[/ironia]
Moraleja: “A veces en la vida, para liberarse de los idiotas, hay que hacerse el estúpido“.
jrojas a las Mar 19, 08 @ 12:41 am