20 de octubre de 2009

La Importancia del Lenguaje

Aprovechando la inercia creada por los últimos posts de Alcides, quiero dedicar una pequeña nota a la importancia de los lenguajes de programación.

Existe una hipótesis en lingüística y psicología denominada como el Principio de Relatividad Lingüística, también llamada la Hipótesis Saphir-Whorf. Esta hipótesis sostiene que la lengua que se habla tiene una influencia en la manera de pensar, conceptualizar y en la forma de experimentar el mundo.

Esta es una hipótesis muy debatida, ya que por un lado, hay proponentes de esta hipótesis que aseguran que el lenguaje condiciona completamente al pensamiento, mientras que por otro lado, se afirma que el pensamiento es anterior al lenguaje y no al revés. Ahora, dejemos que los científicos hagan su trabajo y últimamente concluyan si fue primero la gallina o el huevo. Lo que si es innegable es que la lengua que usamos para comunicarnos si tiene un impacto en la manera en que componemos e hilamos nuestros pensamientos.

No sé si a ti amable lector, que eres bilingüe o incluso políglota, te ha pasado que al pensar sobre cierto tema particular te sientes más cómodo al hacerlo en una lengua que en otra. A mi en lo particular, me ciento más cómodo pensando sobre programación en ingles que en español. No es malinchismo ni nada que se le parezca. Simplemente que cuando comenzaba a aprender sobre el tema, eran relativamente pocos los libros y revistas que había disponibles en español (ni hablar que algunas traducciones eran de plano pésimas, pero esa es otra historia), por lo cual me vi obligado a satisfacer mi curiosidad y mis necesidades académicas con publicaciones escritas en la lengua de Shakespeare.

Ahora bien, ¿alguna vez nos hemos puesto a pensar en el impacto que tiene el Lenguaje de Programación que usamos para nuestro trabajo diario en la efectividad con la que desempeñamos el mismo? En otras palabras, el lenguaje que estoy usando en mi proyecto actual ¿Ayuda o inhibe el proceso mental que me permite hallar respuestas a los problemas que enfrento el día de hoy?

Debemos recordar que si bien todos los lenguajes de programación son, de hecho Equivalentes Turing, eso no significa que todos sean igualmente adecuados para cada tarea.

Por ejemplo, hay muchos filósofos e intelectuales que han comentado que los mejores lenguajes para el pensamiento son el latín, el griego y el alemán (…) Es curioso notar que a pesar de ser la lengua más hablada del mundo, nadie ha afirmado jamás que el ingles sea una buena lengua para el pensamiento. Pensemos en ello un momento.

Recordemos que el desarrollo de software es una actividad eminentemente intelectual. Es quizás, junto con la poesía y otras formas de creación literaria, una de las actividades más puramente intelectuales en las que se puede embarcar el ser humano. Nuestro trabajo consiste 80% o un 90% en pensar, y después un 10% o un 20% en otras cosas como teclear, etc.

Entonces, ¿hay acaso lenguajes que son mejores para el pensamiento que otros?, ¿cuales? y por otro lado, el hecho de que la mayor parte de los proyectos, libros y artículos de revistas se escriban en Visual Basic, C# y Java ¿no es razón suficiente para concentrar mis esfuerzos en esos lenguajes?

De hecho, hay lenguajes que son mejores para el pensamiento que otros: smalltalk, lisp y posiblemente ruby, son algunos de ellos. Aunque en muchos aspectos estos lenguajes difieren enormemente entre sí (como el griego y el alemán también lo hacen), tienen una característica que a mi modo de ver es esencial: son lenguajes tersos.  ¿A qué me refiero con eso? A que:

Permiten un contenido semántico rico con un mínimo de elementos sintácticos.

Esto no significa otra cosa que el hecho de que estos lenguajes permiten expresar una gran cantidad de conceptos utilizando muy pocas palabras reservadas, puntuación, operadores, etcétera.

Ahora bien, no estoy afirmando que todos debiéramos renunciar a nuestros trabajos actuales o ponernos en huelga para exigir que los proyectos se desarrollen exclusivamente en lisp. Sería fantástico que todos tuviéramos por lo menos una vez la experiencia de desarrollar un proyecto grande en estos lenguajes. Sin embargo, esto no siempre es posible. Desgraciadamente, aunque no es un buen lenguaje para el pensamiento, el ingles sigue siendo la lengua más hablada en el mundo, y una gran cantidad de ciencia, tecnología e incluso literatura se realizan todos los días utilizando esa lengua.

¿Entonces porqué aprender griego clásico o smalltalk? Porque nos dan más y mejores herramientas para pensar. En varias ocasiones me he tenido que romper la cabeza tratando de darle la vuelta a un problema que parece que no tiene solución en Visual Basic o en Javascript. Y en muchas de esas ocasiones lo que me ha salvado el día es pensar “¿Cómo lo resolverías si el lenguaje no fuera una limitante?”… Usualmente recuerdo una técnica o idea que aprendí en Python o en Lisp que me permiten destrabar mi proceso mental y llegar a una solución práctica.

Alguna vez leí que Google contrata mejores programadores que su competencia porque la mayoría de sus programadores programa en dos o tres lenguajes distintos que no son necesariamente los lenguajes más comerciales del momento.

Esto me lleva a un corolario de la hipótesis Saphir-Whorf con la que comencé esta nota:

El lenguaje de programación no es un condicionante para escribir código malo.

Me gustaría leer sus comentarios.

Saludos

4 comentarios:

  1. Esto me ha recordado una frase que considero muy cierta:

    "Real ugliness is not harsh-looking syntax, but having to build programs out of the wrong concepts." - Paul Graham - The Python Paradox

    Los conceptos y las ideas son lo más importante. Hay lenguajes de programación que se prestan más para la expresión de ciertos conceptos que otros eso es innegable.
    En lingüística y psicología si bien hay todavía algunos puntos de debate sobre la tesis de Sapir-Whorf, creo que en materia de lenguajes de programación esta es definitivamente cierta.
    Todos los lenguajes de programación han sido creados con un fin y con una filosofía en mente.
    Debemos tener en cuenta este factor cuando elegimos algun lenguaje para alguna tarea en particular.

    ResponderEliminar
  2. Tengo mis reservas acerca de algunas de las opiniones que Graham 先生 en algunos de sus artículos, sin embargo creo que este en particular es de lo más recomendable, por lo que incluyo la liga al mismo:

    http://www.paulgraham.com/pypar.html

    Se puede encontrar una traducción del mismo en esta página:

    http://www.fduran.com/blog/la-paradoja-de-python-the-python-paradox/

    Ojo... parece que el dueño del sitio tuvo algunos problemas con la codificación de las páginas, pero en fin... creo que es más entendible que usar yahoo o algún otro traductor en linea.

    ResponderEliminar
  3. Me presento y me disculpo, en ese orden.
    Soy seguidora del Blog por invitación expresa de el Joven Alcides
    Me disculpo por no tener el rango de conocimientos como para entender al 100% lo que aquí explican... ya se andará
    En este post en particular considero que todo el mundo estamos de acuerdo... tanto los que programamos, como los que usan excel y word para un mismo proyecto.

    El lenguaje (de programación y/o de la ayuda/manual) no es limitante cuando se tiene una lógica a prueba de balas

    Yo pienso, debido a mi propia experiencia, que con la apertura de las compuertas de internet, todos pudimos aprender más y mejor encontrándonos con gente mas que con manuales/revistas/libros y es que no es lo mismo buscar
    "Soluciones para condicionantes"
    que encontrarse con alguien en el chat y preguntar: "Como diablos le hago para este problema en específico?".

    Saludos! y un placer

    ResponderEliminar
  4. Teresa:

    Muchas gracias y bienvenida.

    Antes que nada una aclaración y para ello me voy a tomar la libertad de hablar por "nosotros": ni el Joven Alcides ( creo que se institucionaliza el mote, ¿no? ;P ) ni un servidor y creo que nadie más pensamos saber más que nadie más. Lo que si creemos es que con los años hemos aprendido algunas cosas que podrían ser de utilidad para otras personas que, como nosotros se dedican al desarrollo y tienen el deseo de hacerlo mejor cada día.

    Este blog no está pensado en ser un refugio para cerebritos. Lo que queremos es más que nada COMPARTIR y COMUNICAR.

    Si, tenemos una agenda de temas que nos gustaría tratar y esperamos que sean interesante para nuestros amigos y demás personas que amablemente nos visiten, pero estamos felices de recibir comentarios, sugerencias, preguntas, críticas, etc.

    Si alguien tiene un tema que le gustaría que abordáramos o incluso una contribución para ser publicada, estaremos felices de recibirla.

    Así pues, nada de disculpas y te ruego que nos sigas haciendo llegar tus comentarios.

    Saludos

    ResponderEliminar