Minggu, 27 Februari 2011

Sobre la expresividad de los lenguajes de programación


En todos estos años de cómputo, he visto todo género de lenguajes de programación, desde los más simples -como Pilot- hasta los verdaderamente complejos (por su espantosa notación, por ejemplo), como Lisp o Haskell.

Hay una gama extraordinaria de lenguajes de programación. Cada uno con su propia filosofía. Por ejemplo, Forth está orientado al stack, y hay que pensar en esos términos cada vez que se quiere generar código para este tipo de lenguajes. Los hay, desde luego, unos más expresivos que otros y he ahí el parámetro para poder valorar si vale la pena utilizar uno u otro lenguaje de programación. Aunque claro, hay más parámetros en esta evaluación.

Por ello, lenguajes como Java, C, C++, C# y Pascal (ya sea Delphi, Turbo Pascal u otro que se denomine así, basándose en el librito de Niklaus Wirth "Pascal User's Manual and Report"), tienen una capacidad expresiva más o menos parecida. Es decir, el lenguaje tiene contempladas una serie de estructuras de datos que lo hacen fuerte expresivamente, esto es, nos permiten expresar nuestras ideas en el mundo de la programación de computadoras.

Por ejemplo, los lenguajes mencionados tienen capacidades para crear arreglos, dinámicos y estáticos, listas ligadas, apuntadores, etc. Esto nos permite crear programas que no utilicen toda la memoria disponible de la máquina, sino que utilicen, solamente cuando lo necesitan, la cantidad de memoria necesaria. Igualmente, hay espacio para variables globales y locales, variables tipo variant, paso por valor o por referencia, así como creación de funciones y procedimientos, etc.

Un programa popular que ilustra esto es Photoshop. Cuando uno quiere trabajar con una imagen muy grande, o hacer una transformación gráfica que requiere de mucha memoria, el programa de Adobe buscará hacerse de dicho almacenamiento para realizar la tarea encomendada. Si de pronto el sistema nota que no le alcanzará la memoria, entonces usará parte del almacenamiento en disco duro como "memoria virtual". Esto habla del poder del programa gráfico de Photoshop: hace las cosas muy bien, muy rápido y además, no se amedrenta ante imágenes gigantescas. Sin pestañear trabaja con ellas con todos los recursos que la computadora tenga a la mano.

Pero el caso de Photoshop es solamente para ilustrar la necesidad de que los lenguajes de programación sean expresivos en ese sentido. Un caso espantoso de lo contrario es el lenguaje BASIC. Al ser uno de los primeros lenguajes de programación, es claro que tuvo N transformaciones hasta convertirse en el monstruo de mil cabezas que es, por ejemplo la versión de BASIC llamada Visual BASIC, de Microsoft. Pero si hablamos de la versión original de BASIC, ésta adolecía de estructuras de datos. A lo más tenía arreglos estáticos y todas las variables, todas, eran globales. Añádase la falta de estructura para el código en donde cada línea (numerada) era una etiqueta, y bajo las órdenes de la instrucción GOTO, se hacía un código spaguetti muy difícil de entender. Hoy día los amantes de Visual BASIC me dirán que todo eso quedó en el olvido y que su lenguaje cumple con las capacidades expresivas de C o Pascal. Probablemente sí. Pero hay un  hecho entonces a considerar: Visual BASIC no es fácilmente portable a otras plataformas.

Y todo esto viene a cuento porque estoy programado en algo llamado PicBasic Pro (PBP), un lenguaje de programación para microcontroladores Pic, basado en el ancestral BASIC. La verdad es que me siento como atado de pies y manos para expresar lo que quiero que haga mi código. Hagan de cuenta que tengo un automóvil que por alguna extraña razón, solamente puede dar vuelta a la derecha y yo quiero dar vuelta a la izquierda. ¿La solución? Dar  tres vueltas de 90 grados a la derecha para salir hacia la izquierda. Si tuviésemos un automóvil así, sería ridículo salir a la calle con él. Pues bien, así me siento cuando tengo que usar el PBP.

Y que conste, con todo y todo, el PBP es una gran ayuda para aquel que quiera programar microcontroladores con un lenguaje de alto nivel, quitándose el enfado de tener que usar el ensamblador de dicho circuito. Tiene algunas virtudes, pero es deplorable en expresividad. Y no es culpa del PBP, sino de la definición del mismo. Sí, resulta muy fácil moverse y programar algunas cosas sencillas. No obstante, es como el coche del volante imperfecto, que nos impide movernos fácilmente hacia donde queramos.

La moraleja es simple: Antes de ponerse a estudiar un lenguaje de programación, analice su poder expresivo. Esto es lo que puede ser la diferencia entre aprender a programar bien o quizás, a tener que darle la vuelta a las cosas porque el lenguaje escogido carece de las estructuras de datos importantes, que hoy en día se antojan elementales.

Tidak ada komentar:

Posting Komentar