sábado, 6 de septiembre de 2008

Programación de altura con HtDP

Hace unos meses hice una breve reseña del libro How to Design Programs [HtDP], un texto de introducción a la programación, que es excepcional en muchos sentidos.

Los autores están preparando desde hace tiempo una segunda edición. La fecha de publicación es indeterminada, porque la redacción de HtDP/2e es sólo una parte pequeña de su trabajo de escritura, de investigación y de enseñanza. No obstante, se puede percibir algo del enfoque que habrá allí, si se lee una versión previa del prólogo de esta edición futura.

La intención de dicho prólogo no es sino la de acercar al lector, en la forma de una inmersión activa e informal, a la práctica de la programación. Esto no es nuevo en los buenos libros de iniciación, me refiero al hecho de empezar a programar, sin detenerse en las sutilezas del lenguaje empleado o en el estudio riguroso de los conceptos introducidos. Ni siquiera es nuevo elegir un ejemplo atractivo como base para la realización de un pequeño programa (en este caso se trata de la visualización de un cohete espacial aterrizando).

No obstante, y en muy pocas páginas (mérito también de PLT-Scheme) se pasa revista a las cuatro o cinco cosas esenciales para todo principiante: tipos de datos. identidad conceptual de las operaciones sobre dichos tipos, definición y aplicación de funciones, control del flujo ---aquí mediante expresiones condicionales---, definición de variables y refactorización de programas, metodología de desarrollo incremental, necesidad del conocimiento del dominio de la aplicación, recursividad y uso de funciones de biblioteca. Además, y a la vez, se aprende a usar la herramienta que servirá de base para los desarrollos posteriores (DrScheme).

Si ya en esto el breve texto es excelente y mejor que muchos de los existentes, donde destaca de forma más original es en algunas profundas apreciaciones que, al paso, se van haciendo, como, por ejemplo, la de insistir en que diseñar programas (desde el punto de vista de este paradigma funcional) no es diferente en esencia al de hacer aritmética o, en general, álgebra, si bien los datos sobre los que se aplica esta aritmética no tengan que ser necesariamente números.

Pero hay más ---la mayor sorpresa queda diferida al final del prólogo: después de esta breve inmersión, el lector se verá tan reconfortado ---al fin y al cabo ha conseguido construir un programa muy simple, pero que funciona, refinándolo incrementalmente y haciendo uso de funciones de biblioteca---, que quizá se sienta ya preparado para enfrentarse a la tarea de aplicar sus nuevos conocimientos a programas de mayor enjundia; en definitiva, que tal vez se considere ya un programador en ciernes. Y de hecho, no pocos de los que se creen programadores se quedan en este punto y no dan un paso, el paso decisivo, más allá de él.

Pero veamos que dice el texto que refiero al respecto:


Adquirir las habilidades mecánicas de la programación ---aprender como escribir instrucciones o expresiones que el computador comprenda, llegar a conocer qué funciones hay disponibles en las bibliotecas, y actividades similares--- no son de mucha ayuda en la programación real. Pretender tal cosa es como pretender que un niño de diez años que sabe driblar puede entrenar a un equipo profesional de fútbol. Es también semejante a pretender que memorizar mil palabras de un diccionario y unas pocas reglas de un libro gramática permite aprender una lengua extranjera.

Programar es mucho más que la mecánica de la adquisición del lenguaje. Programar es algo que tiene que ver [, más bien,] con leer los enunciados de un problema y extraer sus conceptos fundamentales, con representarse qué es lo que realmente se quiere, con explorar ejemplos que fortalezcan el conocimiento intuitivo del problema, con organizar este conocimiento y con conocer lo que todavía no se conoce, con llenar todas estas últimos y pequeñas lagunas, con asegurarse de que las cosas funcionen realmente y de que lo harán así en el futuro. En breve, trata en realidad de resolver problemas de un modo sistemático.


Y todo esto, que es de lo que realmente va la programación, es lo que pretende ser el libro que el prólogo reseñado introduce y que es, ni más ni menos, aquello en lo que radica la originalidad de HtDP con las novedades y refinamientos que, a buen seguro, la segunda edición incorporará. Su excelencia, por otra parte, es la de hacerlo de un modo sistemático, bien secuenciado y motivador, de forma que el alumno, el lector, llegue, con esfuerzo, pero sin dificultad, a cubrir un objetivo que de otro modo sería inalcanzable.

Pues, en efecto, la virtud de un buen libro de texto, y especialmente de los libros introductorios, en éste o en cualquier campo, es guiar al principiante por los complejos mundos de su ámbito con originalidad y profundidad en lo tocante a la materia tratada ---lo que supone, ni que decir tiene, un conocimiento preciso del asunto---. pero de forma que el camino, aún siendo en sí difícil, resulte practicable, y hasta sorprendentemente fácil a veces.

Reunir ambas cualidades, excelencia en el contenido de la materia impartida y maestría en la forma de enseñarla, es una virtud a la mano de muy pocos. HtDP y sus secuelas gozan, en mi opinión, de este escaso y preciado don.

No hay comentarios:

Publicar un comentario