12-26-2005
He tenido eso en la cabeza buena parte del día de hoy: ¿cómo enseñarle a un niño a programar? Pero supongo que para muchos la pregunta en realidad será ¿para qué enseñarle a un niño a programar? (y quizás sea necesario decir que por “programar” estoy entendiendo “escribir programas informáticos”)
Primero es necesario sacar algunos mitos del camino:
- Para poder programar hay que ser programador profesional.
- Mucha gente piensa que programar es una cosa muy difícil, para la cual hay que estudiar muchos años. Pocas cosas se alejan más de la realidad. Lo que requiere un estudio riguroso es el diseño de sistemas informáticos, no programar en sí. De hecho existen muchas escuelas de informática en el mundo donde los alumnos no aprenden a programar como parte del currículo (sí, aprenden a programar, pero un poco como actividad “extracurricular”).
- Solo los informáticos programan.
Mucha gente de ciencas básicas programa como parte de su diario quehacer (y existe también gente obtusa en ciencias básicas que opina que un “científico” no tiene por qué andar programando nada), de hecho la “bioinformática” es tema moderno y candente. Una
cantidad apreciable de ingenieros también programa como parte de su ejercicio profesional. Mucha gente de Filosofía y Letras programa también y conozco a un teólogo que lo hace. Recuerdo al menos a un par de abogados que programan (o programaban) regularmente. Se de
varios médicos en la misma situación.
- Programar es para genios (o alternativamente: programar es muy difícil)
Yo no podría cantar bien aunque mi vida dependiera de ello, pero no por ello digo que cantar sea particularmente difícil (cantar extraordinariamente … eso es otro cuento), tan solo admito que es algo en lo cual yo no he puesto empeño, y que quizás, haciéndolo, podría llegar a cantar pasablemente. Programar es una habilidad innata.Programar es algo que se aprende, igual como se aprende a leer en público (y sí, hay personas que hacen ambas cosas muy mal). Hay
personas que parecen tener una habilidad nata para programar, pero en realidad lo que tienen es facilidad para pensar en abstracto.
Programar una computadora quiere decir, en el nivel más básico, “decirle qué hacer.” No hay nada realmente más fundamental que esto, cualesquiera otras cosas constituyen tan solo detalles de un mecanismo particular — y usualmente artificial — para decirle a una computadora qué hacer. Algunas veces estos mecanismos son escogidos porque se ha encontrado que son convenientes para el programador. Otras veces porque pueden ser fácilmente comprendidos por una computadora. El primer paso difícil que se debe dar en programación es aprender y aceptar estos mecanismos artificiales, sin importar si tienen “sentido” o no.
Programar no es una tarea fácil, pero tampoco es una tarea difícil, al menos no por las razones que mucha gente parece pensar que lo es. Programar no es un área altamente teórica del conocimiento, como lo puede ser Física. En realidad no se requiere un título avanzado para hacerlo bien. Es cierto que existen principios importantes en Ciencias de la Computación, pero también es cierto que es posible obtener un título avanzado en Ciencias de la Computación sin tener una idea de como aplicar estos mecanismos a la programación. Igualmente existen muchos buenos programadores que nunca han obtenido un título en Ciencias de la Computación.
En comparación con alguna clase de actividades, como gimnasia o pintura, la programación no require de cierta tipo de habilidad o talento innatos. Sin embargo si requiere de cuidado y “arte.” Más específicamente, programar require de atención a los detalles, buena memoria y capacidad para abstraer. ¿Son esas cosas habilidades que se encuentran en un niño? ¿en todos los niños? Probablemente no, de hecho buena parte de nuestro crecimiento va asociado a desarrollar precisamente esas habilidades. Y aquí es donde programar puede resultar útil. Programar puede ayudar a desarrollar habilidades lógicas, comunicativas e intuitivas, entre otras. Así, la intención de enseñar a niños a programar no es realmente ponerlos en la ruta para convertirse en programadores profesionales, sino es una cosa de ayudarlos a formarse una visión más completa del mundo, y siendo ambicioso, ayudarlos a ser mejores personas.
En ese sentido es que me senté un largo rato hoy en la tarde leyendo algunos sitios web al respecto. Mi opinión optimista respecto a por qué enseñar a los niños a programar es compartida por mucha gente, pero donde no hay consenso es en el tema de si se logra el resultado deseado, es decir, desarrollar cierto tipo de habilidades en los niños. Los niños a quienes se les ha enseñado a programar ha desarrollado efectivamente habilidades para pensar en forma abstracta, pero aplicadas al dominio específico de la programación y no necesariamente a otras áreas de su desarrollo personal.
La otra área de debate es por supuesto ¿qué enseñarles? Es difícil enseñar a programar sin enseñar un lenguaje particular simultáneamente, pues esa forma de abordar el problema requiere de un pensamiento abstracto altamente desarrollado, ¡que es una de las cosas que se busca! Los candidatos obvios son Lisp y Logo (siendo Logo una forma particular de Lisp) dado que tienen una sintaxis simple que facilita su asimilación. El problema es que la misma sintaxis es extraña y puede resultar contraproducente. Logo tiene la ventaja de que al incorporar ideas de graficación dentro del lenguaje hace que se puedan presentar conceptos en una forma probablemente atractiva para muchos niños (sin decir que tiene un atractivo personal para mi). Una posible alternativa es Ruby, que tiene una sintaxis simple, es fácil de entender y tiene una comunidad sumamente activa detrás. Sería necesario implementar algún tipo de facilidades de graficación á là Logo.
Quién sabe, puede resultar algo interesante. Seguiré leyendo.