Por qué no Python? (continuado)

Jueves, Marzo 13, 2008

Después de leer la respuesta de Giuseppe a mi post anterior (y tener tiempo libre para responder) me quedé con la impresión de que Giuseppe me malinterpretó respecto de la pregunta “¿Por qué no Python?” la cual yo pretendía debatir en el contexto de los “3 mosqueteros” (Perl, Python y Ruby) y excluyendo a SmallTalk debido a que este no estaba originalmente en ese pequeño conjunto, y a que en general no se lo considera dentro de esa “clase” de lenguajes “dinámicos” o de “scripting” que tienen tanto furor en la industria por estos días.

Las razones por la cuales Giuseppe descartó a Perl y a Python quedan muy bien justificadas por él en el contexto de su elección y mi pregunta no apuntaba a cuestionar tal decisión sino al asunto mas general de la moda de Ruby y la aparente (y a mi juicio inmerecida) omisión de Python.

Quise debatir esa pregunta porque en el contexto de la discusión entre Perl, Python y Ruby, éste último está teniendo en la actualidad mucha atención de la industria y en base a los argumentos que expuse en mi post anterior creo que se debería prestar mas atención a Python, siempre hablando en el contexto exclusivo de este trío.

SmallTalk es cosa aparte. Así como Giuseppe, yo también considero que SmallTalk es superior en muchos aspectos que cualquiera de estos otros lenguajes.

Para ser honesto, hace años que sueño con tener la oportunidad de utilizar SmallTalk en cualquier proyecto, sueño que por desgracia no he podido realizar por diversos motivos. Siendo la plataforma Java mi principal fuente laboral desde hace unos 6 años, siento incluso un pequeño pinchazo de envidia cuando leo a Giuseppe contarnos que pudo elegir SmallTalk para ciertos proyectos y me entusiasmo al imaginar la posibilidad de poder colaborar alguna vez en algún proyecto que utilice SmallTalk, laboral o no.

Por qué no Python?

Lunes, Marzo 10, 2008

Acabo de leer este post de Giuseppe el cual me pareció muy interesante.

Estoy de acuerdo con la gran mayoría de lo dicho en el post, sin embargo me llamó mucho la atención que Giuseppe no haya comentado las razones por las cuales descartó Python, las cuales me interesaría muchísimo leer.

Tengo la fuerte impresión, desde hace un tiempo mas bien largo, de que python es la mejor opción dentro de los “tres mosqueteros” como los llama Giuseppe (perl, python y ruby).

El por qué no elegiría perl es muy simple y se refiere mas que nada a la sintaxis, atención que esto no implica que perl no sea un gran lenguaje, de lo cual hace mucho tiempo estoy convencido.

En cuanto a python y ruby la cosa está mucho mas reñida por sus similitudes y diferencias, ambos lenguajes resultan muy ágiles y poderosos para escribir casi cualquier tipo de solución en ellos.

En cuanto a sintaxis python y ruby tienen cada uno ventajas y desventajas. Python parece ser mas apropiado para escribir codigo mas legible lo cual lo hace mas mantenible a largo plazo en comparación con el código que se escribe con ruby. Ruby permite mas libertad, lo cual lo convierte en un lenguaje mas placentero para escribir código, hace mas fácil construir prototipos y DSLs con él y seguramente permite reducir levemente la cantidad de LoC. Personalmente prefiero la sintaxis de ruby aunque para proyectos grandes y complejos creo que la de python es menos riesgosa.

En cuanto a performance, python lleva la ventaja, al menos en mi experiencia, y siempre hablando del ruby de matz (no he desarrollado proyectos completos con jruby el cual tiene el potencial de performance de la JVM).

Sin embargo cada vez que vuelvo a Ruby por algún proyecto en particular, siempre me decepciona en un momento u otro la calidad de las librerías estandar. Suelen estar a medio implementar, ser incompletas, sin consistencia en el diseño de las APIs, o con APIs muy pobres y hasta APIs copiadas 1 a 1 de otros lenguajes. Suelen tener bugs y cuando las empiezo a hacer el debug ya no me sorprenden letreros del tipo “no implementado” en el código. Su documentación también desilusiona bastante, la gran mayoría de los métodos no tienen ni una descripción de lo que hacen.

En comparación, las librerías de python suelen estar completas y ser bastante robustas, bien documentadas e incluso tener muy buena performance.

En fin… sigo queriendo saber por qué Giuseppe excluyó a Python de su lista…