miércoles, 16 de julio de 2008

Los primeros pasos (pero antes un poco de nostalgia).

La nostalgia

El otro día me cayó el viejazo. Uno de esos momentos en que algún manejo de fechas medio desprolijo devuelve un resultado que en principio sentimos como un "way out of range" pero que después se valida. Dicho en criollo caí en la cuenta de que hace cinco (!) años que estoy de ayudante en la facultad.

Eso disparó todo un hilo acerca de los problemas de acompañar a alguien en sus primeros (tirando a segundos, en realidad) pasos en la codificación, que es básicamente lo que hago. Y siguió hacia el recuerdo de mis propios primeros pasos frente a un ejercicio. Armado apenas con un par de instrucciones básicas que difícilmente sabía de memoria, logré determinar si un triángulo era isósceles, escaleno o equilátero a partir de la longitud de los lados, que ingresaba el usuario. Tenía... creo que 11 o 12 años (¡cuánto más sabe alguien de esa edad ahora!).

El hilo quedó dormido un rato y luego volvió en el tiempo hasta el recuerdo de las primeras veces que dí clase. Tenía un par de alumnos particulares (amigos y conocidos) a los que les daba clase de DOS, LOTUS, WORDSTAR (!), luego Windows, Office, etc. De esas experiencias queda una larga colección de CDs de música importados (¿qué más podía hacer con el dinero?) y sólo continúan las eternas clases de computación a mi señora madre, desafío que todavía no he superado (aunque parece que esta vez...).

Snif... bueh, a lo que importa.

Empecé a escribir esto cuando encontré algo en común en todas esas experiencias. Todas comenzaron con el mismo problema.

El escenario

Yo quería usar la computadora (Atari 800XL) para "guardar información" según recuerdo (creo que mi imagen mental venía a ser algo como ahora es internet), pero básicamente porque la tenía un compañero de la escuela y en su casa jugábamos juegos que eran mejores que los míos (yo tenía el Atari 2600).

Mis primeros alumnos particulares querían (dependiendo el caso) llevar una lista de videos, redactar cartas, contabilidad casera, contabilidad profesional, comunicarse con amigos, buscar información en internet, etc.

Mis alumnos de facultad quieren aprobar. Si aprenden, mejor.

El tema es que aprender a "usar la computadora", no es lo mismo que "aprender a llevar la contabilidad". Aprender a "usar la computadora" es más parecido a aprender a escribir:

Para aprender a escribir tenemos que saber hablar. Para aprender a usar una computadora tenemos que saber algo de aquello para lo que la vamos a usar. Para aprender a programar, por ejemplo, tenemos que saber resolver problemas mediante una serie de pasos sencillos.

Luego aprendemos una serie de símbolos que sirven para expresar aquello que ya sabemos decir. Aprendemos qué es una ventana, el cursor, un ícono, un botón, los sonidos, todas esas convenciones que nos resultan ahora tan naturales (pero que en algún momento aprendimos). En programación aprendemos un lenguaje.

Luego utilizamos esos símbolos para expresar lo que se nos ocurra y nos olvidamos de ellos. Ni siquiera los vemos, se vuelven transparentes (prueben concentrarse en la palabra "vaca" sin pensar en una vaca). Es cuando la secretaria sabe que para enviar la correspondencia a una lista va a usar la computadora. Tal vez no sabe ni qué programa debe utilizar y mucho menos cómo, pero mirando un poco lo va a encontrar, o si no lo buscará en internet y podrá entender la ayuda que encuentre. Es cuando utilizamos un lenguaje de programación para resolver problemas de negocio, pero ya casi no pensamos en la sintaxis o en el estilo sino que estamos concentrados en el negocio.

No hay nada más. Luego es práctica y perfeccionamiento infinito.

Ahora voy a mi experiencia como ayudante:

El primer paso ("aprender a hablar") ya está dado, es el conocimiento previo con el que viene el alumno.

El segundo ("aprender los símbolos") es trabajoso, a veces aburrido. Se trata de definir, de presentar, de buscar la mínima memorización necesaria para arrancar. La didáctica ayuda con reglas para expresarse claramente y exponer ordenadamente.

El verdadero desafío es el tercer paso ("expresar lo que se nos ocurra"). Es un "click" que con un poco de suerte se percibe claramente (¡en serio!). Digamos que el hito es el primer ejercicio que se resuelve bien sin ayuda. Cada persona es diferente y tiene mucho que ver con las tendencias personales. No todos dan este paso. Por lo menos en lo específico de la programación muy pocos lo hacen durante el curso (si siguen en la rama de la programación seguramente lo harán más adelante). Los que lo logran aprueban fácilmente con algo de práctica, los que no deben compensar con mayor esfuerzo, memorización y repetición.

Recuerdo mi eterna lucha en la secundaria: 10 en matemática, 4 en geografía. Nunca encontré lógica alguna en la geografía, siempre tuve que memorizar todo con muchísimo esfuerzo para aprobar con lo justo. Y claro que hay lógica en la geografía, sólo que no entra en mi cabeza. Matemática sólo practicaba para poder hacer rápido el parcial.

El problema

Retomando, hablaba de un problema. ¿Cuál es el problema? La ansiedad. La búsqueda del resultado, el exclusivo interés por el resultado.

Con respecto a mis primeros alumnos particulares, cada uno de ellos quería hacer algo específico (ej.:llevar la contabilidad) y sólo eso. No tiene nada de malo, pero me costó mucho entender que eso no era "aprender a usar la computadora" (ese lenguaje que les permitiría hacer cualquier cosa), sino simplemente utilizarla como una licuadora ("introduzca la fruta por la parte superior... fije la tapa... presione el botón...").

Es más difícil cuando lo que nos piden aprender es tan complejo que no puede ser memorizado de esa manera. Ejemplo: "solamente quiero usar internet"(!?). Es todo un desafío hacer que el alumno asuma este esfuerzo que a veces se percibe como excesivo en comparación con cada "necesidad" tomada individualmente. Es decir: parece demasiado hablar sobre cómo está armada internet para navegar por la web, pero la alternativa a eso es una serie interminable de instrucciones para la mensajería instantánea, el correo, el explorador, el p2p, cada uno de ellos en todas sus infinitas variaciones y productos. Haciendo hincapié en el lenguaje y con una orientación general, el resto está ahí, justamente, en internet.

Pero yo era chico, y no creo que me haya ido muy bien en eso.

En la facultad el equivalente es el pobre aspirante a analista funcional o gerente de sistemas que se siente tan perdido como yo me sentía en las clases de Dirección General. Nada se puede hacer por ellos salvo ayudarlos a pasar el examen práctico lo menos dolorosamente posible (esperando que por lo menos encuentren interesante la teoría).

Percibo una especie de actitud típica en estos alumnos, que es la de intentar memorizar estructuras o series de pasos mecánicos, "recetas", para resolver los problemas (aplicando tal vez la misma solución que yo al "zafar" geografía memorizando todo). Para ver bien lo dificultoso del intento, volvamos a la analogía con la escritura: ¿cómo puedo memorizar un método para trasladar lo que digo al papel? Por ejemplo: como hacen las computadoras, por fonética. Para un ser humano es casi impensable.

El problema de "lograr que asuman el esfuerzo" es, en este caso, un poco menor (al fin y al cabo la motivación está). Pero hay que empujarlos suavemente a dar aunque sea un primer paso por vencer la dificultad en ver la lógica general detrás de cada solución, más allá de que luego se memoricen ciertas estructuras con el sólo objetivo de aprobar.

El final, siempre abierto, siempre ambigüo

A modo de cierre: creo que, como siempre, el verdadero arte está en ubicarse en la situación e intentar que el alumno se lleve lo más relevante de acuerdo a sus propios objetivos, al tiempo que cumple con los mínimos estándares a los que obliga el título en aquellas áreas que no sean tan de su interés.

1 comentario:

Cerebrado dijo...

"Eso disparó todo un hilo... "

pensé que queria decir:

"(new System.Threading.Thread()).Start();"

...pero no estaba seguro, hasta que leí: "El hilo quedó dormido un rato " y ahí si que seguro que es

"System.Threading.Thread.Sleep(unrato)"

;)