miércoles, 2 de septiembre de 2009

Stroustrup y la enseñanza de la programación ...

... o la ciencia de la vida.

Sí, tal rimbombante extensión del título de esta entrada ha pasado por mi cabeza, aunque la he omitido no tanto por pretenciosa, que lo es, cuanto por evitar una cabecera demasiado larga para Blogger.

¿A qué viene este embrollo? La cosa es que durante algunos días de este verano y, aprovechando, cómo no, el tan preciado descanso, me ha dado por hincar ligeramente el diente al nuevo libro del maestro Bjarne Stroustrup. Para quien no sepa quién es Stroustrup, baste decir que no sólo es el creador del lenguaje de programación C++, sino seguramente una de las personalidades más valoradas del mundillo de la informática.

Pues bien, resulta que Stroustrup ha sacado tiempo, entre sus muchas dedicaciones y responsabilidades de experto, para escribir nada menos que una introducción a la programación, un buen tocho de más de 1000 páginas titulado Programming -- Principles and Practices using C++. No he leído más que la primera parte, algo más de unas 300 páginas espléndidas en más de un sentido.

No es mi propósito hacer una reseña del libro ---por lo demás, imposible, dado que sólo he leído un fragmento---, ni siquiera una reseña de esta primera parte, que ya de por sí la merecería. Lo que, más bien, me interesa es reflexionar sobre mi experiencia al topar con sus capítulos sexto y séptimo (especialmente, el sexto).

Téngase en cuenta que mi punto de vista no es sólo el del entusiasta en estos asuntos técnicos, ni siquiera el del propenso a encontrar placer en la didáctica de la programación, sino más bien el de quien enseña algo, si bien de una índole en apariencia muy diferente. Porque, al cabo, el problema del aprendizaje va mucho más allá del objeto de la enseñanza, o sea, de la materia que se imparte, y se concentra, en particular ---si se me permite el juego de palabras, en su objetivo; y éste, cuando se entiende en su mayor generalidad, es común probablemente, a todas las formas de aprendizaje.

Pues bien, los capítulos en cuestión enseñan cosas como:

  • Diseño de una gramática abstracta para interpretar el input que procesará un programa de cálculo aritmético (una calculadora).

  • Implementación de esa misma gramática a través de funciones recursivas, mutuamente relacionadas.

  • Creación de tipos en C++ y manipulación del input a través de un tipo stream creado por el usuario.

  • etc.



Sorprende, ciertamente, que un libro de introducción ponga sobre la mesa del aprendiz una tarea de esta complejidad a unas pocas páginas de distancia de su presupuesta total ignorancia sobre la programación. Es evidente, sin duda, que Stroustrup trata a sus alumnos como adultos capaces de asumir retos difíciles desde el primer momento.

Pero lo verdaderamente sorprendente es la forma como Stroustrup plantea el ataque a este problema de programación, el diseño e implementación de una calculadora. Muchos se quedarán en la superficie y verán tan sólo un caso más ---no muy frecuente, por cierto, en textos introductorios--- de la práctica de un diseño e implementación incrementales. Pero la cosa, a mi modo de ver va más allá.

Hay algo en esas páginas que trasciende la cuestión relativa a conceptos y técnicas de programación. Dicho en pocas palabras, lo que Stroustrup una y otra vez trata de hacernos comprender es que el verdadero meollo de la programación no es otra cosa que el de pensar a fondo sobre un problema, el de acercarse, mientras hacemos el camino, a la naturaleza misma del problema inicial, cuyo sentido y complejidad se va haciendo cada vez más presente ---aunque, quizá, me atrevería a decir, nunca completa y enteramente presente---, gracias a nuestros ingenuos errores iniciales, a nuestros pasos en falso y a toda esa serie de tentativas aparentemente infructuosas y, sin embargo, imprescindibles, de las que consta todo proceso de investigación lanzado hacia lo nuevo, hacia lo desconocido.

La excelencia del maestro se mide no por la cantidad o, incluso, calidad de las cosas que enseña ---que también---, sino sobre todo porque nos hace comprender que el aprendizaje no termina nunca y que, nosotros, por muy arriba que estemos en nuestra destreza y conocimientos, somos esencialmente aprendices a la hora de enfrentarnos a nuevos retos ---los únicos que al cabo interesan---, esencialmente falibles, incorrectos, tentativos.

No es diferente lo que los grandes maestros han venido enseñando desde los albores de nuestra civilización. Piénsese, por ejemplo, en el método platónico-socrático del elenchos y la dialéctica; piénsese en el proceso de aprendizaje de cualquier artesanía compleja.

... Y piénsese ---por qué no--- en las propias cuestiones de la vida, las que nos azoran de continuo, desconcertantes, irresueltas y, a un tiempo y por ello mismo, fascinantes.

Mucho se gana ---diría, incluso, que todo se gana--- cuando se comprende que el experto no es nunca el infalible, sino el que asume con plena conciencia hasta qué punto el camino no es, ni debe ser, rectilíneo, sino más bien sinuoso, espiral incluso; y que, lejos de que ello suspenda el entusiasmo y el juicio, nos ata a la aventura del descubrimiento con la misma poderosa fuerza que el aprendiz siente en sus primeras andaduras.

Gracias, maestro Stroustrup, por recordarlo, incluso allí donde el lego quizá esperase, basado en peligrosos lugares comunes, justamente lo contrario.

2 comentarios:

  1. En el artículo se habla de la necesidad de dar pasos en falso para una buena y firme construcción del conocimiento. Estoy de acuerdo con ello pero, me vienen a la cabeza ahora mismo algunas preguntas... Esencialmente, ¿esto es válido únicamente para aquél "saber que aún no es conocido"? Teniendo en cuenta teorías que afirman un mejor aprendizaje cuando se evita el error para que este no sea asimilado ¿Cómo evolucionan pues los saberes que ya están "afianzados" de alguna manera? ¿Qué saberes son estos, es decir, hay diferencia entre unos y otros tipos de conocimientos (prácticos; teóricos, etc.)? ¿Cómo discernimos entre aquellos conocimientos en los que es necesario el ensayo-error y los que se aprenden mejor mediante la repetición de "lo correcto"? En el segundo de los casos, ¿cómo asegurarnos de qué es lo que está bien si no lo sometemos a la prueba del error de manera periódica?
    Demasiadas preguntas y pocas respuestas... Es obvio que "probando" se descubren las cosas y que las teorías se nutren de ello pero ,opino que quizás esas teorías nunca dejan de construirse y para ello, hay que equivocarse.

    ResponderEliminar
  2. Tus preguntas, y la reflexión que plantean, son muy pertinentes.

    En efecto, una parte esencial del aprendizaje en las disciplinas prácticas ---las artesanías, en el sentido más amplio de la palabra--- se basa en la repetición de "lo correcto": el maestro propone el modelo que el alumno debe imitar. El maestro conoce el modelo en virtud de la experiencia acumulada a lo largo de los años, de los siglos, en el marco de su profesión, aunque, sin duda, habrá añadido al propio modelo su impronta personal.

    Esto, ya por sí solo, es interesante. El modelo no es nunca algo perfectamente definido, cerrado y acabado como puede ser un teorema matemático, de ahí que cada maestro lo pueda refinar según su propio desarrollo.

    Por otra parte, la aplicación del modelo a una situación concreta requiere una adaptación que casi siempre implica un esfuerzo específico.

    En definitiva, el aprendiz, incluso al tratar de asimilar el modelo y, más aún, al aplicarlo a una situación práctica concreta, debe ir pasando ya por las fases de ensayo, por los inevitables deslices, etc. a los que me refiero en el artículo principal, y ello aunque la meta esté relativamente bien definida.

    Naturalmente, ante un terreno menos conocido, donde el modelo, el procedimiento que aplicar, no existe o no está claramente a la vista o, como deliberadamente puede plantear el maestro en fases avanzadas de la enseñanza, resulta menos definido, el proceso de búsqueda descrito ocupa gran parte de la tarea artesanal.

    En una disciplina cuasi-axiomática, el proceso es distinto en tanto en cuanto una gran parte del aprendizaje consiste en la adquisición de conocimientos perfectamente precisos ---pensemos, por ejemplo, en las matemáticas. Pero, incluso allí, no hay una forma clara de enseñar cómo se prueban teoremas nuevos, prueba que tendrá que pasar, de nuevo, inevitablemente, por la exploración de caminos, el ensayo, el error, etc.

    En último término, mi opinión es que hay que buscar siempre un equilibrio entre la adquisición de conocimientos existentes ---y de modelos---, que, en cierto modo, constituyen los utensilios por medio de los cuales nos ponemos de camino, y el proceso de la aventura y la exploración en que consiste el recorrido, en cada caso distinto, de un camino en particular.

    La didáctica al uso suele enfatizar únicamente el primer aspecto, tal vez porque resulta mucho más fácilmente programable, legislable, impersonalmente impartible ---lacras de una eduación burocratizada, como la nuestra. Por eso es tan importante destacar el otro lado, sin el cual no hay realmente educación posible.

    Que Stroustrup lo haga a partir de un problema conocido, el diseño e implementación de una calculadora ---algo que un programador experimentado realizaría con facilidad---, hay que entenderlo como un recurso didáctico. Programar una calculadora es un problema desconocido para un prinicipiante. Lo importante no es sólo que se llegue a obtener un prototipo de calculadora ---como sucede en el texto---, sino que se aprenda a que, ante problemas donde no existe una solución preparada, se lleve a cabo el arduo proceso de búsqueda planteado en el ejemplo, que no se eche mano de soluciones ad hoc, introducidas con calzador, o de soluciones sucias, inmantenibles, que funcionan por casualidad.

    En realidad, y por volver al inicio de la reflexión, Stroustrup no hace otra cosa que plantearnos un modelo de "lo correcto", si bien se trata aquí de un meta-modelo, un modelo sobre la estructura misma del proceso que se ha de poner en marcha en la investigación de un problema en programación.

    Ojalá estos meta-modelos cuajasen en otras disciplinas. Se evitarían muchos fracasos y muchos malos entendidos.

    ResponderEliminar