<body>

Sitios web relacionados: PingBlog | Fotos

viernes, octubre 28, 2005

¿Porqué me ladilla el fanatismo de los programadores?: Java no ha muerto, y si Ruby es depinga

Financial District
Distrito financiero en Boston. ¿No adivina que lenguaje se usa en los bancos?


Como se nota que me estoy poniendo viejo; Les voy a repetir una canción que he escuchado hasta el cansansio una y otra vez:
  • C++ es mucho mejor que C; No hay que programar orientado a funciones, orientación a objetos es muy depinga y hay mejores librerías.
  • Perl / CGI es lo máximo. Es mejor que utilizar C o C++ para hacer CGI. Perl es lo máximo.
  • Python tiene mejor sintaxis orientada a objeto que Perl. Python va a desplazar a Perl como lenguaje de scripting.
  • Java es mejor que Perl / CGI y que C++. Puede correr en todos lados y el desempeño es brutal.
  • LAMP o Linux Apache MySQL y PHP (no, no Perl) es mucho mejor, además que más fácil de usar que Java / Servlets.
  • ¿PHP? ¿Java? ¡No joda, eso es taaan 1990! Ruby on Rails es lo máximo. Es táaan fácil de usar y poderoso.
¿Me siguen? La onda de "mi lenguaje de programación" favorito se repita como una moda una y otra vez. Las ordas de programadores borregos cantan al unisono "que arrecha es mi herramienta". El argumento lo he escuchado una y otra vez, pero el resultado es el mismo, seguimos haciendo programas inseguros, inestables, solo cambiamos el martillo de goma por el hidraulico.

Yo en particular he sido increiblemente sarcastico con PHP, porque lo considero una solución sucia (falta de madurez en su modelo de acceso a base datos, falta de separación con un modelo limpio MVC); Sin embargo si lo que quiere es hacer un proyecto web rápido y no sabe mucho de computación, no se me ocurre un lenguaje tan fácil de usar como PHP. Para administración de sistemas, Perl es lo mejor, sobre todo en UNIX ya que su facilidad de manejo de texto es simplemente insuperable. Ayuda que jode tener modulos por doquier en CPAN; Por otro lado tenemos a Python el cual es mucho más elegante en cuanto a sintaxis y lo suficientemente versatil como para que aún sea utilizado en otras áreas, como BioInformática (un negocio multimillonario en los Estados Unidos, particularmente en Boston. Sino vean la cantidad de articulos sobre ingenieros manipulando cadenas de proteinas y todo ese poco de cosas :)).

Y tenemos a Ruby on Rails. El entorno es fácil de instalar, tiene "magos" y niveles de abstracción los cuales permiten resolver problemas rápidamente y de manera mucho más elegante que PHP. Pero dificilmente lo llamaría un lenguaje para la empresa (no estoy siendo despectivo). Lo otro es que es nuevo y ¿a quién no le gusta aprender algo nuevo, y más si sirve?

Esta semana ha sido la semana de decir que Java está muerto, viva Ruby. Por ejemplo en el blog de O'Reilly (uno de los pocos que se molestó en articular algo) se dijeron cosas como que Ruby es sencillo, flexible y poderozo. Yo creo que es cuestión de que tipo de problema quiera resolver usted, veamos algunos ejemplos
  • Desarrollo de aplicaciones Web, con un buen patrón MVC: Ruby y Rails le permite hacer eso y bien; Java con su API de Servlets es poderozo y más complicado, pero al igual que Ruby usted puede utilizar bajo Java a Struts o al más moderno, flexible y fácil de usar Spring.
  • La capa de persistencia en base de datos es muy fácil de usar con Ruby y Rails. En Java usted puede utilizar Hibernate (por ejemplo) o Spring JDBC, Spring DAO u otras alternativas para dedicarse a lo realmente importante, que es resolver el problema.
  • Necesita escribir una aplicación gráfica de escritorio: Ruby, no sé pero Java tiene a Swing y si no le gusta puede utilizar SWT de Eclipse.
  • Necesita escribir una aplicación para un dispositivo como un PDA: Con Ruby, no se puede. Java MicroEdition es soportado en Linux, PalmOS y Windows CE entre otros.
  • Necesita que el lenguaje sea abierto: Ambos lo son. ¿Quiere una implementación OpenSource? Utilice el proyecto GNU ClassPath o espere por Apache Jeronimo.
  • Necesita tolerancia a fallos, balanceo de cagas y soporte comercial: IBM, Sun, BEA, Oracle, Weblogic, Microsoft, Macromedia ofrecen soporte comercial.
  • Necesita soporte comunitario: Ruby cuenta con una comunidad vibrante y apasionada. Java no se queda atrás (vease JBOSS, Jakarta, NetBeans, Eclipse, entre otros).
  • No quiere mostrar su código a otros competidores: El código en Bytecode de Java se puede transformar (ofuscate es la palabra adecuada). Con Ruby es más dificil (aunque no debe ser imposible).
  • Necesita una herramienta madura: Java ya tiene 10 años de vida, y sectores tan conservadores como finanzas lo utilizan a todos los niveles. Va a pasar un tiempo antes de qaue usted vea una aplicación con Rails en una compañia conservadora.
  • Necesita hacer scripts: Con Java sólo no puede (eso va a cambiar con la siguiente máquina virtual de Sun, la cual incluira a Javascript como lenguaje). Pero si solamente instala unas librerías entonces puede utilizar Jhyton, Groovy, Javascript, BeanShell entre otros.
  • Soporte amplio para cualquier base de datos: Ruby soporta las más populares, pero para algunas de ellas deberá programar su propio manejador. Java y JDBC... bueno, el reto es conseguir una base de datos que sirva que no tenga un manejador de JDBC :)

Botes en la bahia de Boston
Los botes y los lenguajes de programación: Los hay de todos los tamaños, cada uno con un proposito


¿Eso significa que Java es mejor que Ruby?. No necesariamente; Ruby tiene una curva de aprendizaje menos pronunciada que Java, no hay que compilar para ver resultados inmediatamante y en el caso de Rails, el entorno resuelve la mayoría de los problemas encontrados cuando se hacen aplicaciones web. Todo eso es buenisimo, ya que la idea de un lenguaje de programación es ayudar a resolver un problema rápido (por eso usted no programa en lenguaje ensamblador, aunque este sea más aparentemente más eficiente que un lenguaje de alto nivel).

Yo soy de los que prefiere saber un par de cosas, pero las sé usar bien. No se mucho de Python, mucho menos de Ruby y quizas me mude cuando las herramientas sean más maduras, en el caso de Ruby; Al menos Python ya tiene tiempo en eso, sino preguntele a la gente de Google, que es lo primero que preguntan para sus posiciones de Ingenieria. Me parece bien que Ruby en Rails sea tan depinga como dicen, me ladilla que digan que Java está muerto (porqué es hablar sin argumentos) y me desespera no ver más programadores echando más código sino hablando de las herramientas que empezaron a utilizar una semana atrás (en la web hay como 1 articulo por cada 10 blogs de tecnología que repiten en tono automata como instalar Ruby en 10 minutos. Lo que no dicen es como mantener todo el aparato corriendo por 10 meses ;)).

Así que sea inteligente. Aprenda una o dos herramientas pero bien. Enseñe a otros como usarla y lo mejor diviertase haciendolo.

Ahh, por cierto, la foto de la ruma de libros de Java comparado con los de Ruby; Es pura paja que usted necesite todo eso para programar bien y rápido aplicaciones en Java. De hecho, otra forma de verlo es que Ruby no tiene tantas alternativas maduras como Java :)

Buscar en Technorati: ,

12 Comentarios:

frank dijo que...

excelente post. comparto el punto de vista, supongo qeu cuando la gente hace esos comentarios se refiere a que X
la gente que lleva muchos años con java o que acaba de aprender algo nuevo y no conoce mas nada suele ser victima de su ignorancia y por eso se defiende quitandole meritos a los demas lenguajes

2:07 AM (enlace permanente)  
carlos dijo que...

que bien escribes de las cosas que conoces.
te juro que no sé nada de java, ni perl, ni php, ni ruby, ni rugby, ni na´de na´que tenga que ver con programar.
pero me he leído tu post completamente y me ha gustado. sin hablar de que me quedan las ideas clarísimas.

casi, casi estamos listo para defender a ruby en cualquier plaza. y a perl, y a java.

muy buenas las dos fotos.

/

5:01 AM (enlace permanente)  
Aníbal Rojas dijo que...

JA ja ja, mi respuesta empieza en: http://tinyurl.com/7w6y3 Aunque no sé donde termina ;-)

8:49 AM (enlace permanente)  
KodeGeek dijo que...

Para ser honesto, este es el tipo de cosas que te provoca escribir cuando lees sobre el mismo tópico toda la semana. En serio, yo entiendo que todos tengamos nuestras herramientas favoritas pero sería mucho más interesante ver como aprender a resolver problemas con las herramientas que ya tenemos.

Me gustaría ver cuando salga mañana el lenguaje "Abuela-1.0"el cual hace lo mismo que Ruby on Rails, pero además soporta Ajax ( y otros detergentes), tenga un motor de base de datos incorporado, servidor web incorporado, no requiera un sistema operativo y ¡no necesite a un programador!

Ahhhh, demasiada habladera de paja, necesito un café :)

Saludos y gracias a todos por responder.

10:00 AM (enlace permanente)  
Sebastian dijo que...

Si vuelves a leer tu post, quizas logres percibir que tu posición es básicamente tan fanatista como lo que intentas denunciar.

Uno suele defender las decisiones que toma como si fueran las mas inteligentes. Y en especial, como si fueran las mas inteligentes para cualquier situacion. Y eso nunca es cierto.

Ruby no es la solucion perfecta. Java tampoco lo es. Pero eso no quiere decir que Ruby no sea util en muchos casos, o que no sea mejor que Java para muchas cosas. Ni que Java no sea lo más apropiado en ciertas situaciones, o incluso la única solucion.

Lo peor que puedes hacer es limitar tus herramientas a una o dos.

O redefinir tus problemas para justificar la decision de utilizar tus herramientas favoritas. Sea Ruby o Java.

Habiendo dicho esto, y con pleno conocimiento de causa... Ruby es la vaina más arrecha que he visto en mucho tiempo. Y si no le has dedicado un par de noches a aprender mas al respecto, estas cometiendo un grave error.

Además, creo que mucha gente no se ha dado cuenta, pero quién más puede perder en la "lucha contra ruby" no es Java, es Perl.

10:47 AM (enlace permanente)  
Anónimo dijo que...

la vida de un programador de java

http://www.nikochan.net/link/5831/

11:21 AM (enlace permanente)  
KodeGeek dijo que...

Sebastian:

Mi posición no es fanatista sino pragmatica; Todo programador sabe que al negocio no le interesa con que herramienta resolviste un problema sino lo resolviste o no. De lado quedan las consideraciones de elegancia, originalidad e incluso inteligencia ya que al final de cuentas los negocios están para hacer dinero.

¿Limitarte a un par de herramientas? Es bueno saber de todo pero es mucho mejor saber un par de cosas bien. Los generalistas no sobreviven mucho tiempo en este negocio y como tu bien lo sabes siempre habrá un lenguaje nuevo arrechisimo que promete cambiar la faz de la tierra (alguien se acuerda el boom de Java 10 años atrás cuando se le comparaba a cada rato con C++).

¿Es Java mejor que Ruby? ¿Es Perl mejor que Ruby? La discusión original no fué esa sino como la orda de borregos se ha sumado a adorar el lenguaje de la semana, diciendo porque es mejor que el otro pero sin hablar (mejor dicho evangelizar) sobre el framework.

Ruby es arrechisimo, no lo dudo. Pero de allí a decir que va a reemplazar a Java, o a PHP o a Perl es ir quizas demasiado lejos. Miren alrededor y aún verán lenguajes fuertes como C y C++ los cuales siempre han sido "amenzadados" por otros lenguajes, pero allí están haciendo su trabajo (y bien).

En cuanto a Java, este sigue evolucionando. La alianza de Google y SUN promete hacerlo aún más popular, y entornos como Spring le dan la libertad que se obtiene con otros entornos similares en otros lenguajes.

En fin, vamos a ver en cuanto tiempo no sale un "Abuelita-1.0" :)

1:17 PM (enlace permanente)  
Aníbal Rojas dijo que...

Sigo escribiendo respuestas, pero mientras tanto te voy a comentar algo: yo dedico una parte de mi tiempo a dar cursos y hacer presentaciones, y créeme la cara de intoxicados con camarones que pone la gente cuando les intentas explicar de que va Spring es un poema... Yo mismo he tenido pesadillas muy vívidas y estan tageadas en XML ;-)

8:49 PM (enlace permanente)  
Mandrake dijo que...

Hola amigo, estaba escribiendo un comentario pero se alargo tanto que decidí convertirlo en post:

http://www.venezolano.web.ve/archives/705-guid.html

7:48 AM (enlace permanente)  
egg dijo que...

Eventualmente las discusiones acerca de los lenguajes de programación caen en el terreno de lo "religioso", que si este es mejor que aquel, etc...
Me inicié en estas lides de la mano de Kernighan y Ritchie (C), luego pasé a C++, y me he dedicado por más de 9 años programar (casi que exclusivamente) en Java (haciendo aplicaciones Web aun antes de que existieran los servlets).
Conozco algo de Perl y PHP aunque distan mucho de ser mi "fuerte". En general nunca me gustaron mucho los lenguaje de scripting.
En cuanto al punto de Ruby y RubyOnRails, realmente Ruby es un lenguaje de programación realmente "interesante" tiene unos conceptos que son en mi entender "innovadores" como por ejemplos los bloques (blocks). En cuanto al framework de RubyOnRails, ayuda a resolver varios problemas out-of-the-box, pero creo que es una consecuencia "natural" de un lenguaje como Ruby.
Coincido con Sebastian en que te estas perdiendo de algo bien interesante sino le das una probada a Ruby.
Por otro lado un aspecto que preocupa de RubyOnRails es el deployment de las aplicaciones, creo que ese es el punto débil a solucionar, que si se usa Apache o lighttpd, que si es vía FastCGI o SCGI.

8:53 AM (enlace permanente)  
BrainX dijo que...

El detalle es que cada quien usa la vaina que mejor le parezca. Al final quien lo usa es el usuario y al usuario le sabe a m... en que esta programado su sistema, lo que el quiere es que FUNCIONE, y no solo eso... por lo general te lo piden "PARA AYER". Como puedes solucionar eso?

Otra vaina: Programador es programador porque programa. Si te dicen "mira panita, tienes que programar en B", te toca programar en B, y si te pagan, no hay derecho a pataleo.

Saluts.

5:45 AM (enlace permanente)  
Anónimo dijo que...

que ruby esto que ruby lo otro....
la mejor forma es un ejemplo.

llevo varios dias tratando de entender como funciona, lo unico que he visto en la web es una pequeña comparacion de como seria un conexion a base de datos desde php y otra con ruby on rails y me parecio increible.

lamentablemente para econtrar dos lineas interesantes he leido cientos de guerras santas lo mismo que sucede con linux y win.

5:07 PM (enlace permanente)  

Publicar un comentario en la entrada

Enlaces a este articulo:

Crear un vínculo

<< Regresar