¿Qué habilidades se requieren para saber programar? Por un lado, parece casi obvio que se necesita un pensamiento lógico-matemático; por otro lado, los lenguajes de programación tienen un vocabulario y una gramática fuertemente estructurada. Entonces ¿qué es más importante? ¿el pensamiento lógico-matemático o el lingüístico? La respuesta a esta pregunta no es trivial, ya que tiene la clave para determinar cómo debemos enseñar a programar.
De los cables a la inteligencia artificial
Las primeras computadoras se programaban conectando cables, un proceso lento, desgastante y propenso a fallas. Las primeras computadoras digitales utilizaban válvulas termoiónicas (o válvulas de vacío) que eran conectadas por cables. Estas válvulas atraían a insectos voladores (bugs) que, al entrar en contacto con los cables provocaban cortocircuitos y morían (pobres bichitos). Y, claro, ya podrá adivinar que de ahí viene el término bug para referirse a los fallos en los sistemas. Más tarde las válvulas serían reemplazadas por los transistores, éstos por los circuitos integrados y éstos por las pastillas de silicio. Pero sólo era la electrónica miniaturizándose. En su esencia, programar sigue siendo una cuestión de conexión de circuitos lógicos. Entonces ¿cómo se podía hacer este proceso de forma dinámica y sencilla?
La solución vino de la mano de Grace Hopper, quien creó el primer compilador (una especie de traductor) que interpreta un programa en un lenguaje entendible por un ser humano, para convertirlo en ceros y unos -que es lo que puede procesar una CPU. Y así nacieron los lenguajes de programación. El gran salto fue que ya no hacía falta enfocarse en los circuitos, lo que permitía pensar con un mayor nivel de abstracción y centrarse en las soluciones.
Los sucesivos lenguajes de programación evolucionaron para que los programadores pudieran modelar el mundo real con mayores grados de complejidad. En el transcurso de unas pocas décadas, se pasó de conectar cables al desarrollo de la inteligencia artificial.
Los lenguajes de programación
El primer programa de computación fue escrito por Ada Lovelace y publicado en la revista Scientific Memoirs en septiembre de 1843, mucho antes de la invención de la primera computadora. Se trató de un desarrollo teórico, aunque esto es lo más común porque toda la tecnología está precedida por un desarrollo científico. Este algoritmo estaba pensado para otro desarrollo teórico, la máquina analítica de Charles Babbage.
Hasta aquí todo parece claro: para programar solo se requiere pensar matemáticamente. Excepto que -sin negar este hecho- diseñar un algoritmo depende en gran medida de la capacidad para utilizar un lenguaje. Y no cualquiera. Para un algoritmo se requiere un Lenguaje Independiente del Contexto (o Lenguaje tipo 2 en la Jerarquía de Chomsky).
Vamos con un ejemplo. Si digo “Juan es un viejo amigo” mi interlocutor podrá interpretar que a) Juan es viejo, b) Juan es mi amigo desde hace muchos años o c) es un amigo de larga data y está entrado en años.
Las gramáticas de los idiomas o lenguajes naturales (comparables a la categoría 1 de los lenguajes formales en la categoría de Chomsky) tienen la dificultad de que no pueden interpretarse inequívocamente. Existe el riesgo de malinterpretar. En otras palabras, los compiladores tendrían las mismas dificultades que los traductores si quisieran convertir el lenguaje natural al lenguaje matemático de las computadoras. Ahora mismo estará pensando ¿y qué problema hay? Bueno, que en el caso de los circuitos binarios la más mínima ambigüedad hace que todo falle. Como una polilla en un circuito.
Para poder escribir un programa se requiere conocer un vocabulario de términos técnicos, que denominamos palabras reservadas, y una gramática muy, pero muy estricta. ¿Estricta como la del inglés? No, peor. Tan estricta que cualquier desviación de las reglas esperadas hará que el compilador rechace el algoritmo. Así que, en esencia, para programar hay que ser muy buen escritor.
Volvemos al punto de partida.
¿Habilidades matemáticas o lingüísticas?
Diversos estudios sobre el procesamiento cognitivo de los programadores proponen dos hipótesis: una corriente sostiene que el cerebro categoriza el código de programación como lo haría con un texto en español o alemán. Es decir, que activa las regiones del cerebro que procesan el lenguaje como, por ejemplo, el Área de Broca. La otra hipótesis es que las regiones del cerebro que procesan el pensamiento lógico-matemático, como el pensamiento simbólico del álgebra, se adaptan para para abstraer el código. Esto involucraría el sistema de demanda múltiple, una región del cerebro que procesa la lógica y la solución de problemas. Un estudio del MIT convocó a programadores expertos para mapear su actividad cerebral por resonancia magnética mientras codificaban (Trafton, 2020). Se esperaba que los resultados zanjaran la cuestión y mostraran de forma clara qué región del cerebro tenía mayor activación, la matemática o la lingüística. Pero la respuesta fue más compleja de lo que se había anticipado. Además de activarse ambas regiones, se vio que otras áreas del cerebro quedaban comprometidas (Liu et al., 2020)
En términos simples, los resultados mostraron que programar es una actividad comparable a la que se observa cuando una persona trata de resolver un problema extremadamente difícil. Por lo que programar puede entenderse como un desafío cognitivo demandante; como resolver los crímenes de Agatha Christie (es lo más difícil que se me ocurre)
Estrategias didácticas
Para seguir conversando
¿Cómo enseñarían ustedes a programar? ¿Qué les ha dado mejores resultados? Me gustaría leer sus opiniones en los comentarios.
¡Nos seguimos leyendo!
Trabajos consultados
Liu, Y; Kim, J.; Wilson, C.; Bedny, M. (2020). Computer code comprehension shares neural resources with formal logical inference in the fronto-parietal network. Johns Hopkins University, United States
Olson, H. (2019). Can I rewire my brain?
SciShow Psych. Is Coding a Math Skill or a Language Skill? Neither? Both?
Trafton, A. (2020). To the brain, reading computer code is not the same as reading language. MIT News Office
Comentarios
Publicar un comentario