pensamiento computacional - UNIPE

pensamiento computacional


Pensamiento Computacional

Un saber de época

“A la lectura, escritura y aritmética, debemos agregar el pensamiento computacional en la habilidad analítica de cada niño” Jeannette Wing

En los últimos años, el término “pensamiento computacional” (PC) ha ganado popularidad. Se lo utiliza para hacer referencia a técnicas y metodologías de resolución de problemas donde intervienen la experiencia y los saberes relacionados con la programación de computadoras. Su aplicación no solamente se restringe a problemas informáticos, sino que se puede utilizar de una manera más amplia, para razonar y trabajar sobre otros tipos de situaciones y áreas de conocimiento. En esencia, es una metodología de resolución de problemas que se puede automatizar (Zapata Ros, 2015).

Según Jeannette Wing, promotora del concepto, el PC es una habilidad fundamental que debería ser desarrollada por todas las personas y no solo ser exclusiva de los profesionales de las ciencias de la computación.

"A la lectura, escritura y aritmética, debemos agregar el pensamiento computacional en la habilidad analítica de cada niño. Así como la imprenta facilitó la difusión de la lecto escritura y el conocimiento matemático, […] la computación y las computadoras facilitan la difusión del pensamiento computacional. El pensamiento computacional implica resolver problemas, diseñar sistemas y comprender el comportamiento humano, basándose en los conceptos fundamentales de la informática”. (Wing, 2006)

Este sentido que le da Wing se relaciona con la educación, al plantear la cuestión de si el desarrollo de las habilidades relacionadas con el pensamiento computacional merece ser tenido en cuenta en los planes de estudio, en particular en los niveles de educación primaria y secundaria.

El PC puede entenderse como una forma alternativa de pensamiento relacionada con el surgimiento de las computadoras, dado que genera un ambiente cognitivo donde se juntan el pensamiento ingenieril, el científico y el lógico matemático (Wing, 2008). Esto implica desarrollar un mayor nivel de abstracción con el fin de resolver problemas concretos del mundo real. Se aplica, preferentemente, al diseño de sistemas (a través de operaciones de modelado) y a la solución de problemas por medio de su automatización en computadoras (pensamiento algorítmico y programación). El pensamiento computacional gira en torno a dos dimensiones: como vínculo entre varias formas de pensamiento (ingenieril, científico y lógico-matemático) en base a utilizar mecanismos computacionales y como recurso orientado al fomento de la abstracción y el análisis de problemas. En el año 2011 Wing y otros autores actualizaron y dotaron de una precisión mayor a su definición de PC, al indicar:

"Pensamiento Computacional son los procesos de pensamiento implicados en la formulación de problemas y sus soluciones para que estas últimas estén representadas de forma que puedan llevarse a cabo de manera efectiva por un procesador de información."

De la definición anterior surgen dos aspectos que están estrechamente ligados a la educación:

a). este saber es un proceso de pensamiento, y por lo tanto independiente de la tecnología

b) el pensamiento computacional es un tipo específico de método de resolución de problemas.

Esto a su vez implica que las soluciones diseñadas pueden ser ejecutadas por una computadora, un agente humano, o una combinación de ambos.

Una serie de trabajos (Villafañe, 2013, National Research Council, 2010; National Research Council, 2011) afirman la importancia del pensamiento computacional como habilidad básica deseable de desarrollar en los estudiantes. Por ejemplo, para Dodero (2012) su desarrollo ayuda a derribar el mito de que las computadoras hacen magia y que el informático es una suerte de mago que actúa de mediador entre los usuarios y una gran fuerza oculta. Por la razón anterior, su desarrollo no debería estar limitado a los técnicos, investigadores y profesionales de la informática, sino que cualquier estudiante debería aprender conceptos relacionados con el PC de igual forma que lo hizo con conocimientos básicos de matemáticas o física.

En una entrevista, J.J. Merelo (Botías Agea, 2014) indica que más que la programación, es necesario que los niños desarrollen el pensamiento computacional, una de cuyas tareas puede ser la programación. Además, recomienda que más allá de resolver problemas, hay que enseñarles una visión no pasiva de la informática. Es decir, que no se perciba solamente a la informática como un producto de consumo (principalmente de entretenimiento), sino que se considere a la computadora como una máquina que hará cosas que los niños y jóvenes deseen y le ordenen.

Como se ha mencionado, el pensamiento computacional está sustentado en una serie de conceptos que provienen de las ciencias de la computación. Por ejemplo, para la International Society for Technology in Education (ISTE, 2011) el PC es un proceso de solución de problemas que incluye las siguientes características, sin limitarse a ellas:

- Formular problemas de una manera que permita usar computadoras y otras herramientas para trabajar en pos de su solución.
- Organizar y analizar datos de forma lógica.
- Representar datos de manera abstracta como modelos y simulaciones.
- Automatizar soluciones mediante pensamiento algorítmico (en base a una serie de pasos ordenados).
- Identificar, analizar e implementar posibles soluciones con el objeto de encontrar la combinación de pasos y recursos de manera más eficiente y efectiva.
- Generalizar y transferir ese proceso de solución de problemas a otros problemas.

Asimismo, las actividades que promueven el pensamiento computacional fomentan en las personas el desarrollo de una serie de destrezas particulares, entre las que se incluyen:
- Confianza al trabajar con la complejidad.
- Persistencia al trabajar con problemas difíciles.
- Tolerancia a la ambigüedad.
- Capacidad para lidiar con problemas abiertos y cerrados.
- Capacidad para comunicarse y trabajar con otros para lograr una meta en común.

El profesor Resnick (Brennan y Resnick, 2012) ha propuesto un enfoque alternativo del Pensamiento Computacional que abarca tres dimensiones:

a) conceptos computacionales que son aquellos que emplean los diseñadores en el trabajo de programación;
b) prácticas computacionales que son las que desarrollan a medida que programan
c) perspectivas computacionales, que son las que los diseñadores construyen sobre el mundo que los rodea y sobre sí mismos.

A partir de esta organización se aportan maneras de valorar los aprendizajes generados por los jóvenes.

Desde el sector corporativo, también las grandes empresas de informática han puesto su mira en la promoción del pensamiento computacional. En octubre del año 2010, Google puso en funcionamiento un portal web denominado Exploración del Pensamiento Computacional , que reúne una importante cantidad de recursos sobre el tema, incluyendo material didáctico para maestros de primaria y secundaria. Por otro lado, Microsoft Research ha financiado el Centro para el Pensamiento Computational en la Universidad de Carnegie Mellon, que apoya proyectos de investigación y de divulgación en ámbitos educativos.

En referencia a la enseñanza de la programación, el dilema de hoy parece estar en torno al software que se escribe versus la forma en que se piensa para resolver problemas. Raja (2014) indica que si se empieza por enseñar el pensamiento computacional en vez de la programación se puede evitar el principio de discriminación que hace que ciertos niños y niñas se inhiban, lo que supone un principio de democratización de los aprendizajes. Por otro lado, en el futuro esos niños, ya en el rol de trabajadores, van a tener saberes y habilidades relacionadas con la forma de pensar y la resolución de problemas que los harán más competentes en el desarrollo de sus profesiones, cualesquiera que ellas sean. Pero para Raja (ibid) la manera en que hoy se enseñan los temas de ciencias de la computación en los establecimientos de educación secundaria está orientada a aspectos relacionados con la escritura de programas, lo cual refuerza la idea de que los lenguajes son sólo para programadores, y en absoluto para artistas, médicos o bibliotecarios.

A fin de contraponer acciones a las realidades comentadas, la Fundación Sadosky, en Argentina, lleva adelante el proyecto educativo de alcance nacional Program.Ar, con el objetivo de enseñar conceptos básicos de las ciencias de la computación a niños y jóvenes. Desde la Fundación se sostiene que

“[La] formación del pensamiento computacional representa una actitud aplicable universalmente y un conjunto de habilidades requeridas actualmente por todos, incluyendo estudiantes y científicos de casi cualquier otra disciplina. Dado que las generaciones actuales se encuentran inmersas en la tecnología, deberíamos intentar enseñar a generaciones de jóvenes las razones detrás de estas nuevas tecnologías. Esto no es alcanzable sin enseñar ciencias de la computación.” (Fundación Sadosky, 2013)

Sin duda, el desarrollo de estas habilidades en nuestros estudiantes les permitirá sacar mejor partido de las ventajas de las transformaciones que los cambios tecnológicos están produciendo en nuestra sociedad y, de alguna manera, contribuirá a la solución de los grandes desafíos que se presentan en el presente. En este sentido, es importante que la capacidad de pensamiento computacional pueda ser desarrollada desde un período temprano de formación. Esto redundará en empoderar a los individuos a través de su desarrollo cognitivo y lograr autonomía para interactuar con el mundo que les toca vivir. En este contexto, el aprender a programar es considerado como un factor que promueve el desarrollo de una forma de pensamiento más abstracta, analítica y eficiente. En estos procesos de enseñanza y de aprendizaje la fuente de motivación es intrínseca y ayuda a promover la creatividad, en un ambiente donde prima el trabajo experimental a partir de la prueba y el error.

Como se puede observar, la temática abordada por el pensamiento computacional se extiende más allá de cualquier visión de orden reduccionista de la informática, que únicamente ve la programación como una técnica industrial de orden menor. En esencia, debemos promover el PC con el objetivo de mejorar la capacidad de entender y solucionar problemas que se puedan automatizar, entendiendo que el beneficio educativo de ser capaz de pensar con la ayuda de estas herramientas cognitivas se transfiere a otros dominios del conocimiento, y refuerza y mejora las habilidades intelectuales de las personas (Wing, 2011).

A modo de resumen, se puede decir que el pensamiento computacional es un conjunto de saberes que merecen ser desarrollados por nuestros estudiantes, con el objeto de tratar de:

a) mejorar la habilidad para solucionar problemas y como un plus, que estas soluciones puedan traducirse para ser ejecutadas por una computadora;
b) que dejen de ser consumidores pasivos de tecnología, y que pasen a tener una relación más estrecha, activa y fructífera con recursos y herramientas tecnológicas, con el objetivo de comprender mejor el mundo que los rodea;
c) que los nuevos lenguajes informáticos les permitan ampliar sus posibilidades de expresión y poner en juego toda su capacidad creativa
d) que aquellos que ya tengan un principio de vocación por la ingeniería o las ciencias de la computación, tengan experiencias de aprendizaje tempranas que les permitan empezar a involucrarse en lo que va a ser parte de su futuro.

 

Capacidades asociadas

Existe cierto consenso en relación a que el pensamiento computacional va más allá de programar o codificar e implica todo un proceso previo, de formulación y análisis del problema, como así también de diseño y de evaluación de soluciones, que empieza a tomar importancia.

En este sentido, entendiendo al pensamiento computacional como un proceso cognitivo que implica un razonamiento lógico aplicado a la resolución de problemas, sus elementos clave son los siguientes (CAS, 2015):

- La capacidad de pensar de forma algorítmica.
- La capacidad de pensar en términos de descomposición.
- La capacidad de pensar en generalizaciones, identificando y haciendo uso de patrones.
- La capacidad de pensar en términos abstractos y la elección de buenas representaciones.
- La capacidad de pensar en términos de evaluación.



Los elementos clave del pensamiento computacional involucran el desarrollo de un razonamiento lógico. Éste permite que los estudiantes puedan dar sentido a las cosas, lo que sucede por medio del análisis y la comprobación de los hechos a través de un pensamiento claro, detallado y preciso. De esta manera, los estudiantes toman sus propios conocimientos y modelos internos para hacer y verificar predicciones y así obtener conclusiones. El razonamiento lógico es la aplicación del pensamiento computacional para resolver problemas (CAS, 2015).

Por ejemplo, en actividades relacionadas con el diseño y la tecnología se encuentra la aplicación del razonamiento lógico. En particular, en el diseño de un objeto, la determinación de su forma y funcionalidad, la elección de los materiales a utilizar y los pasos de fabricación. La descomposición se aplica al dividir un proyecto o proceso en diferentes partes según un criterio en particular. La generalización sucede cuando dada una situación particular el estudiante es capaz de establecer nuevas conexiones y pensar sobre otras aplicaciones o usos en otros contextos. Al diseñar se están realizando tareas de predicción dado que se suponen comportamientos. El poder simular comportamientos implica evaluar situaciones futuras y así mejorar el diseño asegurando predicciones correctas. Cuando se escribe una solución a un problema, para que pueda ser implementada por una persona o una computadora, hay tareas relacionadas con la búsqueda y corrección de errores: en esa instancia también existe un proceso de razonamiento.

El razonamiento lógico ayuda a explicar por qué sucede algo. Esto es muy importante en ciencias de la computación, debido a que las computadoras son predecibles en sus resultados, solo realizan aquello para lo cual están programadas. En virtud de esta cualidad se utiliza el razonamiento lógico para programarlas y así describir con exactitud las tareas a realizar. Entendido de esta manera el razonamiento lógico equivale a explicar por qué algo es así.

A continuación, se desarrollarán hasta el final del capítulo, de manera detallada, cada una de las capacidades básicas que componen el pensamiento computacional.

Capacidad de pensar de forma algorítmica

Un algoritmo, en principio, es un objeto de comunicación compuesto por un conjunto finito de instrucciones que especifican una secuencia de operaciones concretas, a realizar en un orden determinado, para resolver un problema. El pensamiento algorítmico es una actividad cognitiva asociada a la resolución de problemas, a su especificación y a la comunicación de su solución.

Los siguientes son ejemplos de algoritmos que expresan soluciones a distintos problemas. Nótese que el algoritmo puede expresarse de distintas formas, en estos casos como un gráfico y como un texto con órdenes.



En general, el pensamiento algorítmico se aplica cuando existen problemas semejantes que tienen que ser resueltos con periodicidad, entonces se analizan en conjunto y se desarrolla una solución general a aplicarse cada vez que ocurre el problema.

En nuestra vida, de manera cotidiana recurrimos de manera constante a algoritmos para solucionar problemas y así realizar cosas. Por ejemplo: para resolver una cuenta y obtener un valor, para cocinar una comida o para realizar una extracción de dinero en un cajero automático. En todos los casos mencionados, seguimos una y otra vez un conjunto ordenado de pasos que están almacenados en nuestro cerebro o en algún soporte externo (como en el caso de la receta de cocina que puede ser tomada de un libro o visualizada en YouTube).

- Cuando un cocinero escribe una receta para realizar un plato, está creando un algoritmo dado que otros pueden seguir los pasos y así reproducirla.

- Cuando un amigo anota las instrucciones para llegar a su casa, está especificando una secuencia de pasos (un algoritmo) para que otra persona lo pueda ubicar.

- Cuando un profesor proporciona un conjunto de instrucciones para llevar a cabo un experimento, está especificando un algoritmo, que es seguido por los estudiantes y así obtienen datos para su análisis y aprendizaje.


Podemos definir al pensamiento algorítmico como la capacidad de pensar en términos de secuencias y reglas que sirven para resolver problemas (CAS, 2015). Es un conocimiento básico que las personas desarrollan cuando aprenden a escribir sus propios programas de computadora, que no son otra cosa que algoritmos traducidos a instrucciones expresadas en un lenguaje que una computadora pueda comprender y ejecutar (por ejemplo, lenguajes informáticos como Scratch, Python, Javascript, etc.).

La palabra algoritmo deriva del nombre de un matemático árabe Mohammed ibn Musa Al-Jwarizmi, nacido en el año 780. Fue un estudioso que realizó aportes importantes a las matemáticas, la geografía y la astronomía. Derivado de su nombre y del de una de sus obras son los términos álgebra, guarismo y algoritmo. Se lo considera el padre del álgebra y quien introdujo el sistema de numeración arábigo en la cultura de Occidente.

Cuando se habla de software se hace referencia directa a los datos digitales y a los programas de computadora. Lev Manovich, autor del libro El software toma el mando, realiza una descripción de su poder y su presencia en la sociedad actual cuando dice: “El software se ha vuelto nuestra interfaz con el mundo, con otras personas, con nuestra memoria e imaginación; un lenguaje universal mediante el cual habla el mundo, un motor universal mediante el cual funciona el mundo” (Manovich, 2013) y por otro lado, nos advierte que: “El software juega, hoy en día, un papel crucial en la confección de elementos materiales y de estructuras inmateriales que, aunados, constituyen la “cultura””.

En las ciencias de la computación el trabajo de los científicos se concentra en encontrar los algoritmos más eficientes. Es decir, aquellos que resuelven un problema involucrando los menores recursos posibles (memoria, comunicaciones, tiempo de procesamiento, etc.) de la manera más efectiva, al dar la respuesta correcta o la más cercana a ella.

Capacidad de pensar en términos de descomposición
Según el Diccionario de la lengua española de la Real Academia Española, descomponer significa ‘separarlas diversas partes que forman un compuesto’, entre otras acepciones. En los siguientes gráficos, pueden observarse distintas situaciones en las cuales sucede un proceso de descomposición: una es la descomposición numérica —que ayuda a que los estudiantes entiendan la disposición y las relaciones entre los dígitos de un número— y otra, la descomposición de la luz con un prisma —para obtener el espectro que representa al arcoíris—.



En la escuela es habitual que nos encontremos con actividades de cierta complejidad que tienen que ser descompuestas en tareas más simples para que puedan llevarse a cabo. Ejemplos de estas actividades pueden ser:

- Preparar la fiesta de fin de año. Tareas: armado del programa de actividades, difusión del evento, preparación y ensayo de las actividades artísticas, preparación y atención del servicio de cantina, preparación y limpieza del salón de actos, etc.

- Desarrollar un plan que permita asignarle el rótulo de ecológica a una institución educativa. Tareas: definir una estrategia para almacenar y procesar la basura, establecer un plan para reducir el consumo de electricidad, planificar una campaña de concientización en la comunidad escolar.

- Planificar la publicación de una revista institucional. Tareas: identificar temas y secciones, asignar roles de los colaboradores y responsabilidades asociadas, planificar tiempos y recursos necesarios a los efectos de llevar adelante el proyecto.

En el ámbito informático, al proceso de dividir un problema en partes más pequeñas o sencillas (y por ende más manejables) se lo conoce como descomposición.
Descomponer un problema es una tarea que facilita su resolución, debido a que reduce su complejidad.

Para descomponer hay que pensar en términos de partes y componentes, donde cada pieza se debe comprender, evaluar y solucionar por separado. Por otro lado, la solución asociada a cada una de las partes puede encargarse a una persona o a un equipo de trabajo, con lo cual esto permite poder resolver problemas complejos en tiempos más acotados (Csizmadia et al., 2015).
En esencia, toda descomposición implica:

- Identificación de las partes de algo.
- División de algo en partes más pequeñas.

Por ejemplo, una actividad en la que se suele aplicar la técnica de la descomposición es la que los detectives policiales realizan ante un crimen a los efectos de esclarecerlo ya que es un proceso complejo, las tareas asociadas son muchas y, en general, son llevadas a cabo por un equipo de agentes. En general, la técnica policial ante un hecho delictivo divide su hacer relacionado con la investigación a partir de una serie de preguntas clave (las cuales se podrían ver como subproblemas): ¿qué tipo de crimen se ha cometido?, ¿cuándo se llevó a cabo?, ¿dónde se cometió?, ¿qué evidencias hay?, ¿hubo testigos?, ¿qué observaron?, ¿quién era la víctima?, ¿hay semejanza con otros crímenes registrados? Luego de obtener las respuestas, el equipo policial puede evaluarlas en su conjunto y empezar a pensar en líneas de investigación a partir de indicios concretos. Como se observa en el ejemplo, la descomposición del problema y la generación de tareas de menor complejidad permiten empezar una resolución efectiva y lógica del problema.

También se puede producir un proceso de descomposición en un proyecto de trabajo: por ejemplo, en la creación de un videojuego en torno al tema de cuidados en el uso de redes sociales. Para facilitar la solución del problema, el equipo responsable realiza un primer análisis y evaluación y luego decide usar esta técnica. Se identifican una serie de partes principales y cada una se asigna a un equipo técnico:

a) diseño de la narrativa, lógica y reglas asociadas al juego;
b) diseño de los personajes, objetos y escenarios;
c) programación del videojuego
d) depuración y búsqueda de errores del producto videojuego.

Luego de analizar la situación, y que el gran problema haya podido dividirse en partes de menor complejidad, se asigna la resolución de cada una a una persona o grupo. A lo largo del desarrollo se ensamblan los resultados de cada equipo en pos de dar solución a la situación problema.

Capacidad de pensar en generalizaciones, identificando y haciendo uso de patrones

Para tratar de pensar el concepto de reconocimiento de patrones supongamos la siguiente situación: una persona está a cargo de un campo con animales y existe comida suficiente y especial para cada uno. Las instrucciones para que un operario alimente a los animales son simples:

- Para alimentar al perro, poner la comida del perro en el plato del perro.
- Para alimentar al pollo, poner la comida del pollo en el plato del pollo.
- Para alimentar al conejo, poner la comida del conejo en el plato del conejo.

Nótese que hay una estructura subyacente común en cada una de las instrucciones anteriores, es decir un patrón, que podría expresarse de la siguiente manera:

- Para alimentar al , poner la comida del en el plato del .

Al detectar un patrón en las instrucciones de alimentación de los animales, se pudo realizar luego un proceso de generalización que simplificó el protocolo de alimentación a partir de una única instrucción genérica.

Ahora vamos a otro caso: observe la siguiente figura y trate de detectar cuál es el patrón que generó el dibujo.



Podríamos decir que a partir de un triángulo equilátero al que se hizo girar dos veces (n grados en cada vez ) se obtuvo la imagen anterior. Por cual el patrón es la rotación del triángulo original n grados.



En la práctica, al descomponer un problema complejo se suelen encontrar patrones entre los subproblemas que fueron definidos. Los patrones se expresan como características compartidas entre los distintos problemas de menor complejidad. Cuando se los detecta es posible trabajarlos de manera conjunta y así simplificar la tarea de resolución. Los problemas son más fáciles de resolver cuando comparten patrones, debido a que es posible usar soluciones ya diseñadas con anterioridad y aplicarlas a los subproblemas.

La generalización es una tarea relacionada con la identificación de patrones, semejanzas y conexiones, para luego realizar una explotación de las características. Se presenta como un método rápido de resolver nuevos problemas en base a clasificarlos como versiones de viejos problemas con solución. Es decir que se hace uso de la experiencia (Csizmadia et al., 2015). En general, la generalización es una tarea que se realiza luego de la descomposición.



La descomposición y la generalización están relacionadas. Mientras que la descomposición implica dividir un problema en partes más pequeñas, la generalización se basa en combinar esas partes. Así, cuando se realiza la generalización a partir de las partes individuales, no se vuelve a unir el problema de la misma manera en que estaba originalmente. El objetivo de la generalización es observar las partes descompuestas y encontrar formas de facilitar el desarrollo de una solución.

Otro ejemplo de generalización aplicada al desarrollo de programas es el siguiente: suponga que un estudiante tiene que realizar un algoritmo y luego un programa que dibuje un triángulo equilátero. Una manera de plantear una posible solución es el algoritmo (escrito en código de bloques del lenguaje Scratch) que se observa en la imagen siguiente a la derecha. Luego de iniciar la tarea se toma una hoja de trabajo limpia y una herramienta lápiz, al que se desplazará 100 unidades de longitud (en nuestro caso son pasos y cada uno tiene una medida fija determinada) y luego se hará girar 120 grados en el sentido horario sobre su eje central. Con eso se ha dibujado un lado y se está preparado para hacer el siguiente.
Como se ve en la imagen luego se repiten dos veces los pares de instrucciones mover y girar. Con eso se completan los tres lados y el algoritmo finaliza con la instrucción de levantar el lápiz.

A la izquierda del algoritmo anterior puede observarse otra solución alternativa al problema (y más eficiente en términos de redacción de la solución), donde se ha identificado que el par de instrucciones mover y girar son en sí un patrón y en este caso se repiten (una vez por cada lado del triángulo). Para hacer más eficiente la solución, cometer menos errores de escritura y comunicar mejor la tarea se utiliza la instrucción “repetir 3” y en cada ciclo de repetición se solicita el dibujo de una cara. En este caso a partir de detectar el patrón “lado” se ha podido hacer una generalización simple y así obtener un algoritmo más legible, optimizado en su escritura y seguramente con menos errores.



Los científicos de las ciencias de la computación desean resolver problemas de forma rápida y eficiente, para lo cual suelen reutilizar métodos efectivos creados con anterioridad. Los patrones son elementos comunes en problemas, se identifican a efectos de crear módulos estándar para que se puedan reutilizar en distintos programas, para solucionar diferentes problemas. En general, a partir de un patrón detectado se construye un módulo común una sola vez. En términos asociados a los lenguajes de programación a estos módulos se los conoce como “procedimientos” o “funciones”.

Capacidad de pensar en términos abstractos, la elección de buenas representaciones
En principio, la abstracción es un proceso por el cual se simplifica el entendimiento de una situación. Se basa en identificar lo que es importante de algo, sin preocuparse por los detalles, así, de esta manera, se puede administrar la complejidad de un problema. Todo proceso de abstracción da como resultado la construcción de una vista simplificada, que es la idea principal de algo.

El ser humano ha utilizado la abstracción de muchas maneras al retratarse a sí mismo. En la imagen superior podemos ver un ejemplo de ello. De izquierda a derecha, el primero es un dibujo clásico de un niño de 3 o 4 años, su primer retrato; luego, aparece el bosquejo utilizado en planos de arquitectura para dar idea de las dimensiones en relación a una persona; en tercer lugar, un monigote típico que se puede observar en muchos esquemas; en el cuarto, la silueta de un hombre que a menudo se usa en señalética; finalmente una caricatura que tiene más detalles a fin de comunicar mejor los sentimientos de los personajes. Todos ellas son representaciones diferentes del mismo objeto y son abstracciones.

Jeannette Wing, indica que: "en el proceso de abstracción, decidir qué detalles debemos resaltar y qué detalles podemos ignorar, subyace en el pensamiento computacional". Teniendo en cuenta que la idea principal de todo no está en los detalles sino en los grandes rasgos, al abstraer algo se obtiene como resultado una vista más comprensible. La base del trabajo de abstracción consiste en la observación, la detección y la reducción de detalles, al ocultar cosas no relevantes.

Diferentes puntos de vista ofrecen diferentes abstracciones. Por ejemplo, los mapamundis solo muestran las características de importancia para un observador particular. Un mapa para asistir a viajantes muestra las rutas, las distancias y las ciudades de una región. Un mapa de distribución de cultivos, realizado para inversores, realza sobre un área específica las áreas asignadas a la producción de cada cultivo con un color asociado, indicando el rendimiento. Pero un mapa de esa misma región realizado para ecólogos podría indicar la distribución de cultivos y los riesgos asociados en relación con el uso de agroquímicos.

Como se ha visto, si bien sobre un mismo problema se pueden generar distintas abstracciones, lo importante para avanzar en su solución es realizar la elección de una buena representación (Csizmadia et al., 2015). Es necesario tener en cuenta que las diferentes representaciones sobre un mismo problema, pueden hacer las cosas más fáciles en algunos casos y más difíciles en otros.

Otro ejemplo clásico de abstracción son los mapas de los servicios de subterráneos de una ciudad. En el año 1931 Harry Beck creó un mapa original de la red de metro de Londres. La característica de este objeto gráfico estaba dada porque solo se mostraban los recorridos de las líneas de trenes y las curvas de Río Támesis, y además las distancias relativas entre las estaciones. Este producto fue realmente innovador, dado que su esquema abstracto de trazado sirvió muy bien a la comunicación, tanto que luego siguió siendo utilizado por bastantes décadas. Según cuenta la historia este producto fue uno entre muchos de los que hizo Beck para resolver el problema de comunicar de forma sencilla el sistema de metro londinense. En el proceso de desarrollo, el nivel de abstracción utilizado fue seleccionado cuidadosamente con la finalidad de incluir sólo los detalles necesarios, (es decir eliminando los innecesarios), ya que si era muy detallado podría haber resultado confuso y si era por demás simplificado, podía obviar información útil.



Un proceso de abstracción permite definir la esencia de algo. En la educación la abstracción suele ser utilizada porque permite mostrar con ejemplos simples sistemas complejos para su estudio y comprensión. Por eso, se aplica en infografías, maquetas, diseños conceptuales, etc.

Otros ejemplos de procesos de abstracción son:

- Una hoja de planificación diaria utiliza la abstracción para representar una semana en términos de días y horas, lo cual la convierte en un objeto útil para organizar el tiempo personal.

- Un mapamundi es una abstracción del planeta. Su composición, en términos de longitud y latitud, ayuda a describir la ubicación y la geografía de un lugar particular.

- En matemáticas, se escriben fórmulas generales en términos de variables en lugar de utilizar números. Esto sucede para que se puedan ser utilizadas en problemas que involucran diferentes valores.

- En música los pentagramas son soportes de escritura de piezas musicales y se los puede entender como abstracciones que representan sonidos en el tiempo.


Capacidad de pensar en términos de evaluación
Una tarea de evaluación implica hacer juicios sobre algo, de una manera sistemática y sobre la base de criterios previamente definidos para que esta sea lo más objetiva posible. La evaluación es algo que se realiza diariamente:de manera regular hacemos juicios sobre qué hacer, pensando en función de una serie de factores que son parte de un contexto. Por ejemplo, cuando alguien va a comprar un automóvil, en general, antes de hacerlo piensa cuán confortable es, en qué medida es económico, si es caro o barato su mantenimiento, etc., es decir, evalúa aspectos esenciales antes de decidir si lo adquiere o no.

También evaluamos algo cuando:

- Cuando cocinamos, probamos nuestros platos para ajustar su sabor y verificar el estado de cocción.

- Cuando recibimos una devolución de un docente de un trabajo estudiantil, revisamos las notas añadidas para saber qué estamos haciendo bien y qué cosas aún nos falta aprender o hemos comprendido de forma errónea.

- Cuando estamos en un nivel de un videojuego y pretendemos pasar al siguiente, probamos y evaluamos distintas estrategias de acción que nos permitan seguir adelante.

En el marco del pensamiento computacional, una vez que se ha diseñado una solución, es necesario asegurarse de que sea adecuada para su propósito. La evaluación es el proceso que se aplica a una respuesta en pos de asegurar que esta responde a los requerimientos de diseño y que, además, funciona correctamente, sin errores. Cuando se trabaja con programas de computadora, la evaluación es una tarea sistemática y rigurosa ya que se está juzgando su efectividad y eficiencia.

Cuando una solución se traduce a un algoritmo, deberían verificarse una serie de elementos que son parte de una prueba de evaluación:
- Que se entienda fácilmente: ¿está completamente descompuesto?
- Que sea eficaz: ¿resuelve el problema?
- Que sea eficiente: ¿resuelve el problema, haciendo el mejor uso posible de los recursos disponibles?
- Que cumpla con los criterios de diseño especificados: ¿está en el marco de los requerimientos?
Luego de que un algoritmo supera el proceso de evaluación y cumple con los cuatro criterios anteriores, se entiende que se está ante una solución correcta; por lo tanto, se puede avanzar a la etapa de programación en algún lenguaje informático. La mayoría de las veces programar sin antes evaluar dificulta la tarea de programar, lo cual puede llevar a más errores y, por ende, a mayores costos y tiempos en el proyecto.

¿Cómo evaluamos nuestra solución? Como hay muchos métodos desarrollados, en principio y a modo de ejemplo, se podría comenzar la tarea con la orientación de las siguientes tres preguntas:
1. ¿Se comprende, de manera completa, cómo se ha resuelto el problema? Es decir,¿la solución construida está explicitada en su totalidad? Si todavía algo no se sabe, aún no se tiene una solución completa. En caso de que no se sepa claramente cómo hacer algo para resolver el problema, hay que volver a la etapa anterior. Es necesario verificar que todo se haya descompuesto correctamente y que cada parte tenga una solución.

2. ¿La solución cubre todas las partes del problema? Aquí se busca validar que la solución propuesta y desarrollada satisfaga plenamente el objetivo a cumplir y que, además, lo haga en el marco de las restricciones impuestas.

3. ¿La solución optimiza la repetición de tareas? En caso de respuesta negativa, se debe preguntar si existe alguna forma de reducir tal repetición, para lo cual hay que regresar a la etapa de desarrollo de la solución y eliminar las repeticiones innecesarias.

En ciencias de la computación, se conoce como depuración o debbuging el proceso de búsqueda y corrección de errores en un programa. Es una tarea de cierta complejidad y tiempo debido a que primero hay que entender el problema y la solución elegida para luego trabajar analizando las instrucciones que la conforman.

Para corregir errores o bugs en programas de computadora, en principio, se sugiere seguir una secuencia de tres pasos:
- Predecir lo que debe suceder;
- Averiguar exactamente qué sucede;
- Trabajar nuevamente donde algo salió mal hasta arreglarlo.
En un programa de computadora suele haber dos tipos de errores: los de codificación (se escribió mal alguna instrucción, por ejemplo, se usó la orden INPRIMIR en vez IMPRIMIR) y los de lógica (el plan asociado a la solución está equivocado).

Para finalizar con el tema de la evaluación, la historia del primer debugging. Fue en la era de las primeras computadoras analógicas y se trató, específicamente, de la Mark III (construida por la Universidad de Harvard para estudios militares). En esa computadora, la ingeniera contraalmirante de la Marina de los Estados Unidos Grace Hopper encontró, en 1947, el primer bug o error en la historia de la informática. Resulta que la máquina no funcionaba bien y, haciendo una revisión física, halló que en el relé 70 de un panel había una polilla que impedía todo contacto eléctrico. De ahí en más se asoció el error informático con la palabra bug (en inglés, bicho).

Técnicas asociadas

Más allá de las capacidades que configuran el pensamiento computacional, de manera complementaria existen una serie de técnicas asociadas a su desarrollo cuya función es ordenar y favorecer el trabajo cognitivo. Son las siguientes:

- Reflexión: Se define como la habilidad de llevar a cabo juicios argumentados sobre situaciones que tengan cierto grado de complejidad. Desde la perspectiva de la informática, las técnicas que promueven la reflexión utilizan criterios sobre la comprensión de las especificaciones de los productos y las necesidades de los usuarios.

- Análisis: para analizar una situación problemática, se acude a una serie de herramientas auxiliares como dividir en partes de menor complejidad los componentes de un problema (descomponer), reducir aspectos de complejidad (abstraer), identificar los procesos y buscar elementos patrones (generalizar). Se trata de utilizar la capacidad analítica, apelando a la lógica, para comprender plenamente el problema y así avanzar en su solución.

- Diseño: es una técnica que se aplica al proceso de desarrollo de una solución efectiva y eficiente de un problema. El diseño implica creatividad debido a que es necesario ver desde distintos puntos de vista un mismo problema, satisfacer las necesidades o deseos y adaptarse a un contexto que la hace posible y sustentable.

- Programación: todo diseño de una solución a un problema debe ser programado para que una computadora pueda automatizar el proceso. A esta traducción de la solución, realizada utilizando los recursos de un lenguaje computacional, se le debe aplicar un proceso de revisión técnica funcional que la evalúe en función de garantizar su funcionamiento correcto en todas las condiciones de trabajo. Asociada al proceso, está la operación de depuración, entendida como la actividad de corrección de errores que solo afectan la programación, debido a que no provienen de etapas previas.

- Aplicación: se basa en la adopción de soluciones existentes para satisfacer las necesidades de otro contexto. Esta habilidad implica el uso de la capacidad de generalizar debido a que se deben identificar patrones y realizar conexiones a efectos de adoptar lo preexistente.



Por otro lado, existen una serie de actitudes adicionales que ayudan a promover el desarrollo del pensamiento computacional. Estas están en relación con aspectos de quienes resuelven los problemas ya que les permitirán enfrentar tales situaciones de una manera más natural, reduciendo la tendencia a la frustración por resultados erróneos o no deseados.

Actitudes vinculadas al pensamiento computacional:

- Perseverancia: Es una de las capacidades extras por desarrollar junto con el pensamiento computacional ya que estamos tratando con problemas y, utilizando nuestra creatividad, debemos pensar en soluciones. Así, perseverar se entiende como la actitud de continuar sin ceder, ser resistente y tenaz en una tarea. En muchas situaciones, al resolver problemas complejos, se necesita voluntad para superar, en ciertas ocasiones, las ganas de abandonar un proyecto y dejarlo inconcluso. La capacidad de perseverar es común a los profesionales de las ciencias de la computación dado que es frecuente que el trabajo intelectual se vea acompañado de fallas y errores que deriven en situaciones de frustración sino se tiene la capacidad mencionada. La tolerancia a los errores, su análisis y comprensión son parte de la disciplina que deben acompañar a todo profesional.


- Experimentación: Otra capacidad por desarrollar en los estudiantes tiene que ver con experimentar, lo que sucede frecuentemente a partir de probar cosas (en inglés, tinkering). Es una forma de intervención, asociada a no conformarse con lo establecido y ya hecho, sino con querer dar un valor agregado a las cosas a partir de una mirada y un hacer crítico que genera nuevas versiones de los objetos en estudio.

Desde la infancia, realizamos actividades de tinkering, a partir de experimentar probando cosas. En los niños pequeños, esta forma de indagación se presenta como una etapa basada en el juego y la exploración con el fin de aprender sobre los objetos del mundo. El deconstruir cosas es una actividad básica, desarmarlas para ver cuáles son sus componentes, materiales, uniones, conexiones, etc. es un juego de hackeo, donde el experimentador deja de ser un consumidor pasivo y pasa a ser alguien que se cuestiona su propio mundo y lo quiere intervenir.

Las comunidades de aprendizaje que experimentan con actividades basadas en el tinkering tienen la libertad de explorar y, en general, lo realizan en un entorno lúdico y libre de riesgos, lo que les da confianza en sí mismas a partir de las posibilidades de creación que aparecen. Estas actividades están asociadas con el razonamiento lógico; en la práctica, a medida que los estudiantes prueban cosas comienzan a acumular experiencias de tipo causa y efecto (por ejemplo: si muevo esto, entonces sucede aquello).

Las modificaciones a un objeto, derivadas de una actividad de tinkering, ayudan a ver que este abordaje de la tecnología pasa por desarrollar la comprensión en vez de obtener respuestas prearmadas y actividades totalmente cerradas. La experimentación brinda a niños y a jóvenes la posibilidad de enfocar algo desde distintas perspectivas, lo cual favorece una compresión holística de las situaciones y suele traer de la mano soluciones no tradicionales.

- Creatividad: El trabajo creativo comprende aspectos de originalidad. Estos se ponen en juego al crear algo valioso y significativo para quien está involucrado directamente en el proceso. La creatividad se aplica tanto a las cosas tangibles como a las que no lo son: hoy los medios y las herramientas digitales han expandido significativamente el espacio de creación del hombre. En una actividad típica donde se crea algo, existen etapas asociadas que, en general, tienen que ver con la planificación, el hacer y la evaluación de lo creado. Por ejemplo, la programación de por sí es un proceso creativo.

Ken Robinson ha definido la creatividad como «el proceso de tener ideas origina- les que tienen valor» (AprendemosJuntos, 2018). Por eso, toda actividad de aprendizaje que implique creación debe ser original, debe nacer de los estudiantes, no debe ser algo donde se copie o se complete sobre la base de instrucciones. Por otro lado, una vez terminado el trabajo, al compartirlo, el creador se comunica con otros y va desarrollando la confianza en sí mismo. La originalidad y el valor agregado cooperan en la construcción del conocimiento dado que, al tener fluidez en el manejo de técnicas, herramientas y materiales, se desarrollan habilidades, saberes e independencia. En síntesis, es una manera lúdica, experimental y útil de expresar las ideas.

Consideraciones finales

De acuerdo con ZapataRos (2015), hay una serie de conceptos que representan la esencia del pensamiento computacional y que merecen ser tenidos en cuenta cuando se piensa su aplicación y desarrollo en contextos educativos, en particular. Son los siguientes:
a) En el pensamiento computacional se conceptualiza, no se programa. Esto se debe a que se piensa como un científico de la computación y, por ende, se requiere pensar apelando a múltiples niveles de abstracción.
b) En el pensamiento computacional son fundamentales las habilidades no memorísticas o no mecánicas. Para programar hace falta una mente imaginativa que haga uso del pensamiento divergente.
c) En el pensamiento computacional lo importante son las ideas, no los artefactos. En esencia, el objetivo es ayudar a que se desarrolle un estudiante activo, creador de artefactos con tecnología, más que un usuario pasivo que se entretiene con objetos tecnológicos.
El desarrollo del pensamiento computacional en el currículum educativo puede verse como una oportunidad (Gurises Unidos, 2017) de ayudar a que niños y jóvenes construyan saberes significativos y necesarios para este tiempo. En particular, las oportunidades pueden estar en relación con las siguientes acciones:

- Actualizar la alfabetización. Desarrollar usos efectivos de las herramientas (Gurs- tein, 2003) y tener fluidez digital (Resnick, 2002) se ha vuelto tan importante como leer, escribir y hacer cuentas. Esto, por un lado, permite conectar a los estudian- tes con su entorno, con su realidad diaria, y, por otro lado, al requerir de estudiantes activos, promueve una relación activa y crítica con tal entorno. Aplicar el pensamiento computacional en proyectos resolviendo problemas, generando prototipos de soluciones y analizando críticamente lo hecho permite superar con creces el «modelo de enseñanza bancario», según lo definió el pedagogo Paulo Freire, que critica el modelo educativo basado exclusivamente en la transmisión no dialógica. Los estudiantes pasan a ser coautores y no solamente usuarios pasivos. También, el pensamiento computacional puede colaborar para ayudar a comprender qué es lo que ocurre detrás de todo dispositivo digital, ya sea en su faz tecnológica o social.

- Potenciar el trabajo colectivo. La mayoría de los objetos tecnológicos que nos rodean son el resultado de procesos de resolución de problemas que involucraron mucha inversión económica y de recursos humanos. En general, no fueron hechos por una única persona en un garaje o en un laboratorio aislado; por lo contrario, son el resultado de la acumulación de muchas soluciones aportadas por distintas personas.El trabajo en equipo es algo fundamental, tanto en la época en que se es estudiante, como a lo largo de toda la vida.
Los equipos permiten trabajar aspectos colaborativos y cooperativos. Los colaborativos se dan cuando los participantes trabajan todos a la vez sobre una situación determinada, en un ida y vuelta, tratando de enfocar sus esfuerzos en una sola cosa (por ejemplo, diseñar una solución a un problema o evaluar una solución construida). En cambio, el trabajo cooperativo sucede en un equipo cuando las tareas se dividen y cada participante o subgrupo del equipo realiza las que acordó hacer para lograr un determinado resultado (por ejemplo, en un diseño de solución alguien podría desarrollar un hardware; otro, fabricar un esqueleto de robot, y un subgrupo, programar las acciones acordadas). Para que se dé un trabajo efectivo en equipo, es necesario construir un marco para la colaboración, donde cada individuo participe en función de sus motivaciones, intereses y capacidades.

- Conectar los saberes teóricos con la práctica. El desarrollo efectivo del pensamiento computacional implica que los estudiantes, necesariamente, tienen que articular saberes prácticos con saberes teóricos. No es ni práctica vacía de sentido ni repetitiva, ni teoría desvinculada de la realidad de cada persona. Para diseñar y construir tecnología, en efecto, hay que conectar los elementos del hacer tecnológico con las bases del conocimiento teórico.

- Apostar a la no directividad. Es decir, intentar la superación del viejo mandato escolar que sostiene:«todos deben aprender lo mismo y al mismo tiempo». En este sentido, la no directividad implica tratar de encontrar nuevos modos de relación con el estudiante donde surja una actitud comprensiva del otro. Así, se intentan encontrar, a partir de una búsqueda compartida, los intereses de los estudiantes y canalizar la energía que tienen para tratar de aumentar sus posibilidades de autonomía, de confianza en sí mismos y de responsabilidad.

- Promover la participación genuina y la autonomía. El trabajo por proyectos, don- de las situaciones problemáticas son el centro, es la base de un hacer pedagógico que promueve la construcción genuina de conocimientos ya que existe una apropiación de estos a lo largo del proceso y, también, en el objeto realizado. Pero, para que este proceso sea efectivo, debe estar conectado con las motivaciones e intereses de los educandos. De esta manera, al promover un ambiente de trabajo donde esté presente el manejo autónomo y participativo, se podrán lograr aprendizajes ricos.

En síntesis: hemos presentado el pensamiento computacional como una forma alternativa de trabajo cognitivo enriquecida por el pensamiento ingenieril, el pensamiento científico y el pensamiento lógico matemático, que se enfoca en el estudio de los problemas y sus soluciones, apuntando a que estas últimas puedan traducirse para que puedan ejecutarse por un procesador de información.

El método de trabajo asociado al PC plantea que todo problema complejo a trabajar debe descomponerse (proceso de descomposición) en subproblemas, lo cual implica que habrá más problemas, pero más pequeños y manejables, cuyas soluciones combinadas aportarán a la solución final del problema original.

El proceso de abstracción permite centrar la atención en las características más importantes del problema, al captar su esencia. Esto se logra al invisibilizar las características no fundamentales y, a la vez, destacar los rasgos más relevantes. Como resultado de la abstracción, se logra desarrollar una representación simplificada del problema.

Luego, se acude a la experiencia, al conocimiento compartido, cuando se procede a realizar el reconocimiento de patrones. Se buscan similitudes entre los distintos subproblemas dentro de una misma situación. De esta manera, se utiliza el conocimiento de problemas similares, que han sido resueltos con anterioridad y se lo aplica directamente (generalización).Cuantos más patrones se reconozcan, será más fácil y rápido el desarrollo de un proyecto.

Luego, cuando se tiene una solución al problema sela traduce en forma de plan de acción a ejecutar (algoritmo) para que sea realizado por una máquina o un agente humano. Finalmente, se realiza una evaluación profunda del algoritmo a los efectos de verificar que, por un lado, dé respuesta efectivamente al problema original, y, por otro lado, no contenga errores en sus instrucciones.

En el capítulo siguiente, se presentan una serie de recursos didácticos, en forma de tareas, para ayudar a desarrollar el pensamiento computacional en estudiantes de primer ciclo de la escuela secundaria.