jueves, octubre 02, 2008

Cuál es el mejor lenguaje de programación

En 1997 cuando decidí que aprendería a programar, le pregunté a mi maestro ¿cuál es el mejor lenguaje de programación?, a lo que me respondió "el que mejor domines".

Pasó el tiempo y decidí por convicción no aprender Basic, en aquél entonces aprendí Pascal (y Delphi por consecuencia) y posteriormente en la carrera llevé C++ y Java, al paso de los años cuando Delphi comenzó a decaer y decidí aprender C#, luego la necesidad me llevó a aprender PHP.

Como verán he trabajado con lenguajes muy diferentes entre sí, con características diversas y sobre IDEs distintos, esta situación me ha permitido poder apreciar ciertas ventajas en cada uno y por lo tanto poder compararlos entre sí; igualmente he visto de cerca proyectos en la mayoría de éstos lenguajes y he sido curioso de revisar el impacto de la herramienta de desarrollo elegida y el resultado de los proyectos.

A continuación anotaré algunas de mis experiencias con cada uno y cada quien es libre de estar o no de acuerdo conmigo:

Pascal
Ventajas:
  • Muy sencillo de aprender
  • No es sensible a mayúsculas y minúsculas
  • Para aprender (en su tiempo) era bueno ya que obligaba a tener ciertos buenos hábitos como el designar un lugar único para la declaración de variables. (Esto hoy en día no es tan válido debido a que las variables en los lenguajes modernos existen únicamente en ciertos ámbitos)
  • Disponible para distintas plataformas

Delphi (Pascal visual)
Ventajas
  • Las mismas que Pascal con excepción de la disponibilidad de plataformas (existió una versión para Linux llamada Kylix de la que salieron si mal no recuerdo 3 versiones pero fué un fracaso)
  • Amplia disponibilidad de componentes desarrollados por otros programadores
  • Mucho código disponible en la web (ejemplo http://q3.nu/trucomania)
  • Fue el primer lenguaje visual capaz de programar librerías de vinculación dinámicas para windows (dll's)
  • La compilación de programas no requería (usualmente) la instalación de librerías adicionales en los sistemas cliente
  • Desarrollo rápido de aplicaciones cliente / servidor
  • Excelente rendimiento de las aplicaciones
  • Apto también para el desarrollo de virus y malware (la neta, era bien fácil)
  • Único lenguaje escrito en sí mismo (más que una ventaja es una curiosidad)
  • Conectividad sencilla con los principales manejadores de bases de datos
Desventajas
  • Falta de una tecnología definitiva para el desarrollo de aplicaciones web (hasta la versión de .Net), recordemos todas las tecnologías que propuso Borland durante varias versiones para el desarrollo de aplicaciones web como IntraWeb.
  • Licencia costosa :S, la versión gratuita existente Turbo Delphi carece de muchos componentes
  • Odio decirlo, habiendo sido usuario de Delphi por muchos años, éste ha dejado de ser un inovador para convertirse en un follower

Java
Ventajas:
  • Filosofía "Escríbelo una vez, córrelo donde sea", o sea portabilidad al máximo
  • Amplia disponibilidad de IDE's, para todos los gustos y presupuestos
  • Plataforma capaz de generar aplicaciones Web, de escritorio, móviles, otros electrónicos (como reproductores de Bluray), etc
  • Lenguaje que nos quitó los dolores de cabeza de los apuntadores
  • Lenguaje sencillo y con mucho código disponible en la web
  • Múltiples frameworks (aunque puede ser igualmente una desventaja porque le pega un poco a la estandarización)
  • Mercado madurando constantemente e integrando aquellas tecnologías nuevas requeridas (ejemplo servicios web, ajax, etc)

Desventajas
  • En móviles, no hay una estandarización de la máquina virtual, por lo que se requiere escribir mucho código para saber que librerías se pueden o no utilizar
  • La máquina virtual es muy pesada sobre algunos sistemas operativos (ejem. Windows)
  • Existen picos de memoria difíciles de controlar (fuente http://reddevnews.com/news/print.aspx?editorialsid=10250)
  • Debido a algunas de sus ventajas (portabilidad y modelo de seguridad de la VM) no es apto para desarrollar aplicaciones que tengan que interactuar con las API de los sistemas operativos
C++
Ventajas:
  • Te permite programar casi cualquier cosa
  • Con los skills adecuados puedes hacer aplicaciones de alto rendimiento 
  • El rey del código ofuscado
  • Multiplataforma
  • Gran cantidad de compiladores, IDE's, librerías y otros recursos disponibles
  • Bueno para hacer acceso a las API del sistema operativo
  • Rico en características de OOP
  • Bueno para programación electrónica
Desventajas:
  • Requiere un nivel de conocimientos de programación mayor al resto de los lenguajes (con excepción de ensamblador)
  • No hay una forma (directa) de hacer aplicaciones web
  • Los desarrollos toman más tiempo debido a su complejidad técnica
  • Tienes que saber muy bien cómo utilizar apuntadores de memoria
C# (Aunque se supone que éste es un derivado de C la verdad a mi parecer tiene más de Java)
Ventajas
  • Desarrollo muy sencillo para aplicaciones de escritorio, web y móviles
  • Disponibilidad de Windows y para Linux
  • Disponibilidad de IDE's gratuitos (SharpDevelop y Visual Studio Express)
  • Disponibilidad de entorno de desarrollo de juegos para X Box 360
  • Lenguaje muy sencillo
  • Alta integración con el sistema operativo Windows (un servidor ha hecho en cuestión de minutos aplicaciones de OCR y autocontestadores de Messenger con este lenguaje)
  • Alta disponibilidad de recursos en la web
  • Lenguaje en evolución constante
Desventajas
  • La suite completa de desarrollo es costosa
  • El IDE es algo pesado en memoria
  • Requiere que cada aplicación distribuida utilice exactamente las librerías del Framework correspondiente (a diferencia de Java que éste si tiene compatibilidad hacia atrás con muy pocas excepciones)
  • Para Linux no hay una versión para aplicaciones Web definitivas
  • Muy casado a plataformas Windows (aunque hay versión para Linux en móviles, por ejemplo, solo se ejecuta sobre un Win Mobile, Win CE o Pocket Win)

PHP
Ventajas
  • OpenSource
  • Excelente integración con otros (grandes) productos de OpenSource como MySQL
  • Muy baja demanda de recursos
  • Mucha documentación disponible en la web
  • Muchos proyectos de código abiertos listos para ser modificados y explotados (http://www.hotscripts.com)
  • Los cambios in hot se pueden realizar fácilmente
  • Lenguaje muy sencillo
  • No requiere IDE
  • No requiere compilación
Desventajas
  • Depuración más compleja que con el resto de los lenguajes
  • Debido a lo sencillo del lenguaje, se presta a tener un código muy revuelto (aunque ésto tiene que ver más con los hábitos del programador)
  • Poca integración con el SO
  • No es posible hacer aplicaciones móviles ni de escritorio (con una GUI propio del SO)

Como se puede observar, y como todo en la vida, cada uno de éstos lenguajes ofrece diferencias en sus características, no puedo decir que tan superior o inferior es uno de otro ya que he visto excelentes y pésimas aplicaciones desarrolladas en cada uno de ellos. Creo que quien se atreva a afirmar que un lenguaje de ellos es superior (o inferior) al resto es porque tiene una visión limitada de las características de cada uno, es un tanto como hablar de cuál es el mejor coche sin contemplar como para qué (puedes buscar el del mejor diseño, el de más accesorios, el de mayor rendimiento de combustible, el más veloz, el más estable, etc).

En conclusión, creo que no hay un lenguaje "mejor" que los demás, pero si puede suceder que algunos de ellos sean los más adecuados para cierto tipos de proyectos, no se puede evaluar un lenguaje por su costo, fama, facilidad de código, etc.

Creo que los elementos para decidir qué lenguaje utilizar tienen que ver más con la naturaleza del o los proyectos que se implementarán, el presupuesto, el skill del personal que desarrollará, la disponibilidad de material de estudio, otros recursos (librerías, IDE's, plugins, etc) disponibles e incluso presupuesto.

Finalmente, he de decir que a mi juicio, creo que tampoco es necesario que un proyecto se desarrolle únicamente bajo un lenguaje, sin que se abuse de ello es posible mezclar distintos lenguajes para construir soluciones ricas en posibilidades, uno de mis ejemplos favoritos es Flickr un proyecto que mezcla PHP, Ajax, Java y MySQL y que funciona con un rendimiento con un nivel de disponibilidad ciertamente impresionante.

A todos los que gusten de la tecnología me gustaría invitarlos a opinar en éste post al respecto, ya que creo que éste tema es bastante rico y se le puede aportar muchísimo más en favor de aquellos que se inician en la tecnología y que buscan guías al respecto.

1 comentario:

Gerald dijo...

Hola!, saludos

Yo al igual que tu, he pasados por la mayoria de los lenguajes que mencionas y te puedo decir que lo que les falta a algunos, le sobran a otros por eso estoy totalmente deacuerdo con la persona que te dijo que el mejor lenguaje es aquel que mas dominas, lo importante es llegar a dominarlo para que con el puedas hacer lo que quieras.

suerte! y de nuevo saludos!