Y creo que es cierto, pero ¿Qué es eso exactamente?
Pensamiento computacional
Bueno, lo cierto es que no parece existir una delimitación clara de qué es realmente eso del pensamiento computacional o al menos yo no la he encontrado.
De una forma vaga, podríamos decir que es un forma de pensamiento similar a la que se utiliza para la definición de lógicas y algoritmos en el mundo de la computación.
El valor, creo, de ese pensamiento computacional es doble.
En primera instancia, nos prepara, precisamente, para hacer ese diseño de programas informáticos, ya sea mediante codificación directa o mediante herramientas de más alto nivel como acoge la filosofía 'Low-Code' o 'No-code'.
A pesar de esa innegable utilidad, en realidad es casi un aspecto secundario. Lo que, realmente, creo que es mucho más importante que eso, y que justifica la propuesta de incluir de forma generalizada en la educación, es que moldea la mente y una manera de pensar que nos ayuda a enfrentarnos de manera muy efectiva a problemas de cualquier tipo, no necesariamente en computación, no necesariamente siquiera del mundo técnico y de la ingeniería, sino también problemáticas propias de las ciencias sociales o las humanidades y también del día a día.
Pero dicho esto, y a pesar de que estoy convencido de ello, lo cierto es que resulta paradójicamente complejo delimitar en qué consiste exactamente eso del pensamiento computacional (aunque probablemente, quien haya hecho 'con sus propias manos' desarrollo software, lo tenga intuitivamente bastante claro).
Hace ya un tiempo, traje a este blog en el post titulado 'Sobre el pensamiento computacional', la propuesta de Conrad Wolfram con una propuesta.
La propuesta de Daniela Rus
Leyendo el libro 'The Heart and the Chip: Our Bright Future with Robots' de Daniela Rus, directora del CSAIL (Science and Artificial Intelligence Laboratory) del MIT, me encuentro con una nueva propuesta, la verdad que bastante diferente, acerca de lo que caracteriza el pensamiento computacional.
En concreto, Rus destaca cuatro elementos, a saber:
- Descomposición: descomposición de los problemas en subproblemas, piezas resolubles.
- Modularización: división de un sistema en módulos, o componentes, cada uno de los cuales realiza una función definida y que son capaces, tanto de operar independientemente como formando parte de un sistema mayor.
- Abstracción: eliminación de detalles y generalización de los atributos relacionados con una tarea.
- Composición: Proceso de recombinar dos o más problemas.
La propuesta de Daniela Rus incide mucho en la descomposición en elementos, tanto en un nivel más lógico como subproblemas, como en un nivel más operativo, incluso técnico, en módulos o componentes. Creo intuir en la propuesta de Rus la experiencia en el mundo hardware y de los sistemas hardware/software, muy comprensible dada sus especialización en robótica.
Algunos elementos más de mi cosecha
Aunque valiosa, y más viniendo de quien viene, creo que la propuesta de Rus se queda bastante corta para explicar el pensamiento computacional.
Aunque confieso y aviso que no lo he pensado mucho, sino que es un 'bote pronto', echo de menos cosas que, al menos en mi experiencia, son muy importantes.
Por un lado la aplicación continua de una lógica rigurosa y muy exacta, sin la más mínima ambigüedad. Siempre suelo decir que 'los ordenadores son tontos'. En programación, especialmente en la programación más tradicional, hay que ser muy rigurosos, muy exactos en las instrucciones que se dan. Si no se hace así, el programa falla y a veces de la manera más inesperada. Esa lógica rigurosa y sin ambigüedad supone un notable esfuerzo al principio pero también es una forma fantástica de moldear el pensamiento. Y es algo que, y que me perdonen los afectados, echo muy en falta en la manera de razonar de incluso grandísimos intelectuales en campos propios de las humanidades y ciencias sociales.
Me resulta difícil darle un nombre, pero otra característica típica del pensamiento computacional es lo que voy a denominar 'encaje en bloques constructivos limitados'. ¿A qué me refiero? Bueno, pues que los entornos de programación el número de instrucciones (en lenguajes de programación tradicionales) o, en general, el número de herramientas o bloques constructivos disponibles para resolver el problema están acotados, son finitos y relativamente escasos. Y con esas instrucciones o con esos bloques, tienes que ser capaz de realizar el sistema o el software con la funcionalidad deseada o requerida. Se trata de nuevo de un ejercicio en ocasiones difícil pero muy creativo y desafiante, y que moldea extraordinariamente bien la mente en ese luchar por encontrar cómo usar las herramientas disponibles para resolver un problema, esa resolución de problemas con herramientas o bloques constructivos acotados.
Y, aunque eso sí lo indica Daniela Rus, profundizaría más en la abstracción, la traslación de los elementos de la vida real, tanto físicos como intangibles, a modelos conceptuales tanto en el campo de los datos y sus relaciones como las lógicas de proceso o transformación de datos. En mi experiencia, tanto docente, como de mera ayuda a profesionales más jóvenes, siempre he visto que esa abstracción es algo que cuesta muchísimo, especialmente cuando no se procede de disciplinas científicas e, incluso cuando, simplemente, no se ha trabajado y practicado con software. Pero, de nuevo, conseguir esa capacidad de abstracción es intelectualmente potentísimo.
Es posible que si lo pienso más se me ocurran más características, pero de momento lo dejo aquí.
Conclusiones
El pensamiento computacional, aunque hay bastante coincidencia en su interés, y necesidad de traslación a todos los ámbitos educativos como una capacidad casi nuclear es, sin embargo, algo vagamente definido, al menos hasta donde me ha sido dado ver.
En este post hemos visto la propuesta de Daniela Rus que he complementado con unas aportaciones propias fruto de mi experiencia y reflexión, aunque ésta última algo precipitada.