Thursday, February 26, 2009

La disciplina de la programación


En todos estos años que llevo en el mundo del cómputo, en particular en la enseñanza de la programación de computadoras, he enfrentado toda clase de paradigmas e ideas. Por ejemplo, están los lenguajes imperativos, de cuarta generación que les dicen, en donde el programador debe decirle al sistema, mediante instrucciones muy precisas, qué queremos que haga la máquina. Así, tenemos que ver esta serie de instrucciones como un algoritmo, una especie de receta de cocina que se debe ejecutar rigurosamente para obtener los resultados deseados.

Para ello hay lenguajes como Pascal o C, el segundo quizás el más popular en el mundo, en donde la expresividad del lenguaje permite hacer muchísimas cosas. Los lenguajes modernos deben contar con estructuras de datos dinámicas, que permiten, en muchos casos, una manera mucho más eficiente de hacer programas y de hacer que estos convivan unos con otros dentro del mismo sistema operativo. Por ello mismo, cuando llegan alumnos que me dicen que programan en Visual Basic, o cualquier variedad de Basic les indico que eso no califica como lenguaje, sino como un “dialecto” de “la tierra primitiva”. Y no exagero. Basic en cualquier modalidad adolece de las estructuras dinámicas asociadas a los lenguajes modernos. Sí, es cierto que Visual Basic ha incorporado algunas ideas de esta naturaleza, pero el problema es que no son estándar, sino que dependen de cada implementación. Por ende, es probable que un programa escrito en Visual Basic sea prácticamente imposible de portar a otro Basic en otra máquina, para hablar de alguna de las deficiencias. Igualmente, la incorporación de apuntadores (o punteros, como suelen decirles en los libros españoles), es bastante primitiva y de difícil uso. Aún así, la popularidad del Basic es evidente porque permite generar prototipos rápidamente, aunque no se utilicen las mejores capacidades expresivas de otros lenguajes.

Otros lenguajes han sido desarrollados para hacer aplicaciones para la Internet, para páginas web y ahí hay cientos de lenguajes de todo género. Tenemos Java, creado por Sun Microsystems, que permite programar prácticamente en cualquier plataforma pues Mac, PC, Linux, o incluso sistemas en computadoras de alto desempeño. Para ello Sun escribió –para cada plataforma– un intérprete de java, que es una máquina virtual. El intérprete está escrito para una implementación única en cada sistema operativo y por ende los programas en Java son portables de una máquina a otra. Además, la cantidad de bibliotecas de funciones para todo género de aplicaciones es extraordinaria. Se cuentan por miles y hay para todas las necesidades. Java tiene sintaxis mezclada de C y Pascal, por lo que la curva de aprendizaje es menor. Además, funciona en un “sandbox”, una especie de caja cerrada en donde la aplicación corre, impidiendo que se puedan crear virus malignos. Es quizás una de las mejores herramientas para programar en la web.

Hay otros lenguajes, como PHP, que es un sistema para generar páginas dinámicas, es decir, páginas que cambian de acuerdo a las necesidades y peticiones de los usuarios. Por ejemplo, Amazon, la tienda virtual de libros, tiene un gran sistema de bases de datos y cada usuario ve cosas diferentes de acuerdo a las peticiones y búsquedas que hacen al sistema. PHP se encarga de presentar los resultados personalizados para cada usuario. Y aunque este sistema es muy robusto y además, se lleva muy bien con MySQL, un manejador de bases de datos escrito para la web, tiene el inconveniente de que es muy poco estricto con los tipos de datos. Así, una variable entera puede recibir un dato de punto flotante o incluso como cadena de caracteres. Eso va contra la disciplina en programación pues da pie a muchísimos errores porque las variables intercambian su propiedad inicial de ser reales, enteras, de caracteres o de cadenas de caracteres. Es difícil “debugear”, es decir, depurar los programas en PHP por este simple hecho de que las variables cambian de tipo y van contra la disciplina en programación. Y aunque es un lenguaje con muchas aplicaciones interesantes, PHP no es un buen candidato para enseñar a nadie a programar.

Más de uno dirá que exagero, pero lo dudo. Los lenguajes de programación se parecen a los lenguajes de los seres humanos, los cuales nos llevan años para más o menos hablarlos con propiedad y soltura. Para ello seguimos reglas que no nos podemos brincar fácilmente pues la comunicación se hace entonces difícil. Imaginen los dobles sentidos para alguien que está aprendiendo a comunicarse. Seguramente lo confundirán estas sutilezas semánticas y en lugar de ayudarlo a comprender las palabras y sus significados, lo confunden más. Eso creo que pasa en mayor o menor grado con PHP, aunque de acuerdo a los amantes de este lenguaje, el asunto de las variables sin tipo (o sin ser estricto en los tipos), es una característica asombrosa que cuando seamos expertos en dicho lenguaje sabremos apreciar. ¿Será cierto?

1 comment:

Antonio García said...

Pues muy interesante el post, acutualmente estoy aprendiendo JAVA y me parece un lenguaje muy bueno para dominar los demás lenguajes.