Sesión 1: el pensamiento computacional

Currículo: aquí encontrarás el desarrollo detallado de los contenidos que forman parte de la primera sesión del Curso de pensamiento computacional, robótica e internet de las cosas, impartido por el CEP de Huelva – Isla Cristina.

Tabla de contenidos

Duración: 3 horas.

Objetivos: el objetivo de esta sesión es entender el pensamiento computacional como dos elementos entrelazados:

  1. Un conjunto de técnicas aplicadas a la programación.
  2. Una forma integral de abordar problemas para diseñar soluciones en distintos contextos, incluyendo la vida cotidiana y las interacciones humanas.

Vamos a establecer antes que nada un marco conceptual para que todos entendamos el punto de partida.

1. Definición y contexto del pensamiento computacional

El pensamiento computacional es un enfoque que utiliza técnicas de las ciencias de la computación para resolver problemas, diseñar sistemas y comprender el comportamiento humano. Es aplicable en muchas disciplinas y no se limita a los expertos en informática.

La principal habilidad que debe adquirirse para dominar un método computacional es el pensamiento lógico.

Además, aplicar el pensamiento computacional supone trabajar un problema desde cuatro puntos de vista:

  • Descomposición: dividir problemas complejos en partes más pequeñas y manejables. 

Cuando planeas un viaje, empiezas dividiéndolo en tareas más pequeñas como elegir el destino, reservar los billetes de avión, buscar alojamiento y planificar actividades. Cada una de estas partes contribuye al objetivo final de tener un viaje organizado.

  • Reconocimiento de patrones: identificar patrones o tendencias en los datos para hacer predicciones más precisas.

Al preparar un examen, si observas que ciertos temas aparecen con más frecuencia en los exámenes anteriores de una asignatura, puedes deducir que esos temas son importantes y probablemente aparecerán de nuevo. Esta observación te permite enfocar tus esfuerzos de estudio de manera más efectiva.

  • Abstracción: concentrarse en la información importante, ignorando los detalles irrelevantes. 

Cuando haces una lista de la compra, generalmente anotas los productos que necesitas sin preocuparte por detalles como la marca o el precio exacto. Te centras en lo fundamental, lo que necesitas comprar, y no en los detalles menos importantes.

  • Diseño de algoritmos: desarrollar un paso a paso para resolver el problema. 

Cuando montas un mueble, estás utilizando un manual de instrucciones. El manual te proporciona pasos concretos y ordenados para ensamblar piezas y usar las herramientas de una manera que te permita obtener el resultado deseado, que es el mueble montado.

2. El pensamiento computacional en la práctica

Muy bien, tenemos un marco conceptual que lo define pero, ¿cómo se hace esto en la práctica? 

Podemos trabajarlo desde numerosos enfoques, pero para acercarnos un poco más a su resolución práctica, necesitamos ahondar un poco más en las características que se incluyen en los procesos de resolución de problemas de este tipo:

  • Plantear problemas de manera que se puedan usar dispositivos digitales para solucionarlos.
  • Estructurar la información de forma lógica.
  • Representar la información mediante abstracciones como modelos y simulaciones.
  • Automatizar soluciones utilizando el pensamiento algorítmico, que consiste en definir una secuencia ordenada de pasos para alcanzar una solución.
  • Evaluar, seleccionar e implementar las soluciones más adecuadas con el objetivo de encontrar la combinación que «mejor» resuelve el problema.
  • Generalizar la aplicación de ese método para resolver problemas similares.

Ejemplo desconectado: revisas los libros de cocina que tienes en casa buscando recetas para elaborar un tiramisú. Seleccionas las 10 recetas que más te gustan. Observas qué tienen en común todas ellas y elaboras tu propia receta. Luego la pruebas y si algo no te satisface, vuelves a elaborarla cambiando cantidades o añadiendo algún otro ingrediente. Finalmente, aplicas la misma receta (cantidades, tiempos de cocción, técnicas de cocina, utensilios, etc.) para elaborar otras recetas de postres (cambiando ingredientes). ¿Has conseguido generalizar una solución para una amplia variedad de problemas? Felicidades, has creado una Thermomix.

Ejemplo digital: necesitamos crear un horario para los profesores de un centro educativo que maximice el uso de recursos, minimice los conflictos y satisfaga las necesidades de todos los miembros.

  1. Plantear problemas de manera que se puedan usar dispositivos digitales para solucionarlos. El problema del horario escolar se formula de manera que se pueda introducir la información requerida en un programa. Esto incluye el número de clases, profesores, aulas, periodos disponibles y restricciones específicas como la disponibilidad de los profesores o las necesidades especiales de ciertas clases.
  1. Estructurar la información de forma lógica. Organizamos los datos en categorías lógicas: datos personales de los profesores (como horas de disponibilidad), información de las clases (asignaturas, cantidad de estudiantes, necesidades especiales), y recursos disponibles (aulas, equipamiento especial). Esta información se estructura en tablas que serán fácilmente gestionadas por el programa.
  1. Representar la información mediante abstracciones como modelos y simulaciones. Utilizamos un modelo de asignación que abstrae los elementos del problema a variables y restricciones en el programa. Por ejemplo, cada bloque de horario se puede representar como una variable que necesita ser llenada con una clase que cumpla con ciertos criterios, como el tipo de aula o la disponibilidad del profesor.
  1. Automatizar soluciones utilizando un algoritmo. Desarrollamos un algoritmo que revise sistemáticamente todas las combinaciones posibles de clases, profesores y aulas, para encontrar la solución más eficiente, asegurando que se satisfagan todas las restricciones sin conflictos.
  1. Evaluar, seleccionar e implementar las soluciones más adecuadas con el objetivo de encontrar la combinación que «mejor» resuelve el problema. Una vez que el algoritmo propone varias soluciones viables, evaluamos cada una basándonos en criterios predefinidos como maximizar el número de horas libres, la equidad en la distribución de los recursos y la satisfacción general de los miembros del claustro. Seleccionamos e implementamos la solución que ofrezca el mejor equilibrio entre estos factores.
  1. Generalizar la aplicación de ese método para resolver problemas similares. El método desarrollado para la creación del horario se ajusta y se aplica a otros problemas de asignación de recursos. Por ejemplo, podría adaptarse para la asignación de tareas en proyectos de grupo, la programación de exámenes, o la distribución de recursos como portátiles o material deportivo.

Como ves, hemos usado el pensamiento computacional para resolver un problema complejo de manera eficiente, al mismo tiempo que hemos conseguido un modelo para resolver problemas similares.

¿Has entendido cómo funciona el pensamiento computacional?

Ejercicio 1 – El pensamiento computacional

Describiendo cómo aplicarías el pensamiento computacional para resolver uno de los cinco problemas que encontrarás en el classroom del curso: Sesión 1 > Ejercicio 1.

No te preocupes por la calidad de la solución ni los detalles en los que hayas podido fallar. Mejorar el pensamiento computacional sólo es posible con la práctica. Irás perfeccionando tu habilidad casi sin darte cuenta a base de trabajar de esta forma.

3. Expresar la solución

Lo que hemos hecho hace unos minutos se empieza a parecer mucho a cómo se expresan en realidad las soluciones computacionales. Vamos a ver tres formas principales que existen de expresar las soluciones.

3.1. Algoritmos

Aunque existen muchas maneras de expresarlos, los algoritmos no son otra cosa que una serie de pasos ordenados.

¿Me estás diciendo que un algoritmo es una receta de cocina? Efectivamente.

Aunque, para que sean realmente útiles deben cumplir con una serie de características:

  • Finito: un algoritmo debe tener un número finito de pasos. Esto significa que después de un número determinado de pasos, debe terminar y no puede entrar en un bucle infinito.
  • Preciso: cada paso del algoritmo debe estar claramente definido; las acciones a realizar deben ser especificadas de manera exacta y sin lugar a dudas.
  • Entrada: los algoritmos tienen cero o más entradas, es decir, datos que necesitan para ser ejecutados. Estas entradas pueden ser desde números y palabras hasta imágenes o clics de un ratón, dependiendo de la tarea que resuelva.
  • Salida: los algoritmos tienen al menos una salida, que es el resultado del procesamiento de las entradas. Este resultado puede ser desde la solución a un problema matemático hasta una decisión basada en una serie de datos.
  • Efectividad: los pasos son lo suficientemente básicos para que puedan ser llevados a cabo, idealmente de manera eficiente y en un tiempo razonable.

Vamos a hacer un ejercicio rápido.

Vas conduciendo, detectas que tienes una rueda pinchada, apartas tu coche a un lugar seguro y echas el freno de mano. No tienes acceso a la grúa, así que tienes que cambiar la rueda. Teniendo en cuenta las características señaladas para que un algoritmo sea útil, escribe los pasos a seguir para cambiar la rueda de un coche. 

¿Ya?

Ahora compáralos con estos pasos:

  1. Abrir el maletero.
  2. Sacar la rueda de repuesto.
  3. Sacar el gato.
  4. Sacar la llave de tubo.
  5. Aflojar los tornillos de la rueda dañada con la llave de tubo, sin quitarlos completamente todavía.
  6. Posicionar el gato debajo del coche eligiendo un punto sólido de elevación cerca de la rueda dañada.
  7. Aplicar el gato hasta que la rueda esté suspendida en el aire.
  8. Retirar completamente los tornillos.
  9. Retirar la rueda.
  10. Colocar la rueda de repuesto.
  11. Alinear la rueda de repuesto con los tornillos del eje.
  12. Enroscar a mano los tornillos lo suficiente para que la rueda quede sujeta.
  13. Bajar cuidadosamente el coche utilizando el gato hasta que la rueda de repuesto toque el suelo pero el peso del coche no esté completamente sobre la rueda.
  14. Apretar firmemente los tornillos con la llave en un patrón cruzado para asegurar un ajuste uniforme.
  15. Bajar completamente el coche.
  16. Retirar el gato.
  17. Dar un último apretón a los tornillos con la llave para asegurar que están bien fijos.
  18. Guardar las herramientas y la rueda dañada en el maletero.
  19. Cerrar el maletero.
  20. Revisar que todo esté en su lugar y que no haya herramientas olvidadas cerca o debajo del coche.
  21. Comprobar la presión de la rueda en la primera estación de servicio.

¿Te han faltado pasos, has olvidado alguno, lo has expresado de manera ambigua?

De eso trata el diseño de los algoritmos, de evitar esas lagunas para que realice su trabajo de la manera que esperamos. 

3.2. Diagramas de flujo de datos -DFD-.

Vale, ya sabes qué es un algoritmo, pero ¿te imaginas que tuvieras que montar un mueble de Ikea siguiendo unas instrucciones de ese estilo? El manual sería interminable.

Por eso, expresar algoritmos en lenguaje natural es algo bastante inoperativo

Por eso, igual que Ikea usa instrucciones gráficas para montar -y ahora también desmontar- sus muebles de forma sencilla:

Nosotros también podemos recurrir a otros métodos para expresar nuestros algoritmos. Uno de los más comunes son los diagramas de flujo de datos.

Un diagrama de flujo es un esquema gráfico que describe un algoritmo. Usa formas geométricas especiales para representar diferentes tipos de acciones o pasos a seguir en el algoritmo. Se llaman así porque lo que hacen realmente es establecer los caminos por los que circulan los datos de tu solucióncómo fluyen los datos-.

Veamos cuáles son estas formas y qué significan.

TERMINADORRepresenta el inicio o el final del algoritmo
PROCESORepresenta cualquier tipo de acción
DECISIÓNPermite evaluar una condición y a partir del resultado encaminarnos por una alternativa u otra
ENTRADA/SALIDARepresenta la lectura de datos en la entrada y la impresión de datos en la salida
FLUJOIndica la siguiente orden que va a ejecutarse

Veamos cómo podríamos diseñar un DFD que controlara mis acciones al intentar sacar un producto de una máquina de vending:

Veamos ahora cómo sería un DFD sencillo para un proceso de registro en cualquier aplicación online en las que aparece el registro con Google.

De esta manera podemos describir los pasos que se van dando, los eventos que se van produciendo, mensajes que se le van mostrando al usuario o datos que el usuario va introduciendo, para ir dirigiendo los datos a lo largo de los distintos caminos que podría seguir según la casuística de cada proceso.

Ejercicio 2 – El diagrama de flujo

Diseña el DFD que describa el problema que encontrarás en el classroom del curso: Sesión 1 > Ejercicio 2.

Puedes hacerlo en papel, pero te recomiendo la herramienta online gratuita Lucid Chart.

3.3. Pseudocódigo

Una vez que hemos expresado nuestro algoritmo como un DFD con una herramienta gráfica, tenemos una visión global de cómo funciona nuestra solución. Estamos, ahora, mucho más cerca de ser capaces de programarla.

Sin embargo, antes de trasladarla a un lenguaje de programación, siempre es recomendable utilizar un lenguaje intermedio, llamado Pseudocódigo, para expresarlo, especialmente cuando las personas se inician en el mundo de la programación.

El pseudocódigo, describe la lógica de los procesos que hemos visto en un DFD en un formato que simula código de programación, pero usando el lenguaje natural. Se centra en los detalles de cómo se ejecutan los pasos individuales dentro de los procesos identificados en el DFD. Así, los programadores tendrán detalles suficientes para comprender exactamente qué implementar, sirviendo como un puente entre el análisis inicial y el código de programación real.

Por ejemplo, este pseudocódigo calcula el área de un triángulo:

INICIAR ProgramaAreaTriangulo
  
  DEFINIR base COMO REAL
  DEFINIR altura COMO REAL
  DEFINIR area COMO REAL

  ESCRIBIR "Introduce la longitud de la base del triángulo:"
  LEER base
  
  ESCRIBIR "Introduce la altura del triángulo:"
  LEER altura

  area = (base * altura) / 2

  ESCRIBIR "El área del triángulo es: " + area

FIN ProgramaAreaTriangulo

Traducir este pseudocódigo a cualquier lenguaje de programación como C, Python o Java, es una tarea extremadamente sencilla, porque ya están especificadas las instrucciones, los tipos de datos, y los cálculos necesarios para resolverlo. El programador lo único que tiene que hacer es aplicar la sintaxis de cada lenguaje concreto.

Como es evidente, todos los programas no cuentan con una descripción en lenguaje natural, luego un DFD, luego un pseudocódigo y finalmente un código en un lenguaje de programación concreto. Esto alargaría demasiado el proceso de desarrollo de aplicaciones, sería muy costoso, y la empresa desarrolladora no podría ser competitiva.

A nivel profesional, esto sólo se hace en casos muy concretos en los que escribir el pseudocódigo forma parte del análisis/debate de una solución compleja que no es evidente a primera vista. Así, los analistas pueden dar una orientación a los programadores de por dónde podría ir la solución.

Aunque, como decíamos, desde el punto de vista de la educación, es muy útil conocerlo para entender cómo funciona el pensamiento computacional desde la redacción de un problema hasta que se convierte en una solución computacional real. Es decir, desde que leemos un problema por primera vez hasta que especificamos detalladamente los pasos para resolverlo.

Debido a las capacidades de nuestros alumnos, llegaremos hasta la definición del DFD, de manera sencilla, y tras él, trasladaremos la solución a un lenguaje de programación por bloques como Scratch, Makecode o Arduino. Será a partir de finales de 3º de ESO donde podamos empezar a introducirlos en la programación con texto.

4. Herramientas para trabajar el pensamiento computacional

Ten en cuenta que el pensamiento computacional nos prepara para dominar cinco habilidades principales:

  • El pensamiento crítico. Es la capacidad para organizar datos de manera lógica, para luego analizarlos y con ello predecir resultados.
  • La descomposición. Es la habilidad para descomponer problemas complejos en partes más pequeñas para simplificar su solución.
  • El reconocimiento de patrones. Consiste en detectar patrones en problemas similares para reutilizarlos en la solución de otro problema.
  • La abstracción. Es el reconocimiento de la información más relevante, obviando los detalles innecesarios, para abstraer elementos comunes.
  • Pensamiento algorítmico. La habilidad para automatizar soluciones por medio de pasos muy bien definidos y estructurados.

Por tanto, si diseñas cualquier actividad «desenchufada» con tus alumnos en los que se trabajen alguna o varias de estas habilidades, estarás entrenando con ellos el pensamiento computacional.

Aquí tienes 6 excelentes ejemplos para trabajar el pensamiento computacional desenchufado.

En la hora del código, por otro lado, tienes muchos recursos para trabajar jugando estas habilidades.

Para empezar a entender la programación por bloques, te recomiendo que jueguen a esto:

Para empezar a relacionar acciones con instrucciones de código textual, te propongo este sencillo juego. Ojo que inicialmente se muy sencillo, pero se va complicando cada vez más:

En general todos los juegos de esa web trabajan de forma muy intensa el pensamiento computacional. Usa su buscador interno para seleccionar las edades correctas y a jugar.

Además, en el repositorio de Procomún, tienes cientos de ejemplos ya preparados para el aula que puedes revisar para aplicarlos en tus clases.

Para terminar, tenemos a Scratch que siempre es un candidato ideal para adquirir de forma muy rápida, destrezas y habilidades propias del pensamiento computacional. Pero eso, lo veremos en la próxima sesión. Eso sí, asumiremos que ya conoces las bases del funcionamiento de Scratch, como las dimensiones del escenario, cómo se mueve un personaje, qué son los disfraces o cómo se cambian los fondos. Si no es así, te recomiendo que practiques con los vídeos que podrás encontrar en Youtube. Pero como mínimo, deberías ver este vídeo antes de la próxima sesión:

Espero que hayas aprovechado estos contenidos, que los repases y por supuesto, que los pongas en práctica en tu aula.

Si quieres compartir con nosotros tu experiencia, no dudes en dejar un comentario.

👋 Hasta la próxima sesión.

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *