# Pensamiento computacional

Al final de este módulo vamos a:   
  
Tener una idea clara de qué es, para qué sirve y cómo desarrollar el pensamiento computacional.  
  
Conocer los cuatro pilares del pensamiento computacional y afrontar retos complejos de forma metódica.   
  
Evaluar la solución obtenida, logrando que esta sea una solución eficiente.  
  
Practicar la resolución de problemas cotidianos desde el punto de vista del Pensamiento Computacional.

# Introducción al pensamiento computacional

## **¿Qué es el pensamiento computacional?**

*Información basada en ["Introduction to computational thinking"](https://www.bbc.co.uk/bitesize/guides/zp92mp3/revision/1) de BBC.*

Los ordenadores pueden usarse para ayudarnos a **resolver problemas**, sin embargo, antes de que se pueda abordar un problema, es necesario **comprender** el problema en sí mismo y las formas en que podría resolverse.

El pensamiento computacional nos facilita **afrontar** un problema complejo, **comprender** cuál es el problema y **desarrollar** posibles estrategias para resolverlo. Luego podemos presentar estas soluciones de una manera tal que un ordenador, una persona o ambos puedan entenderlo.

### **Los cuatro pilares del pensamiento computacional**

[![pilares_pc.jpg](https://libros.catedu.es/uploads/images/gallery/2023-06/scaled-1680-/pilares-pc.jpg)](https://libros.catedu.es/uploads/images/gallery/2023-06/pilares-pc.jpg)

<span style="vertical-align: inherit;"><span style="vertical-align: inherit;">La [**clasificación de la BBC**](https://www.bbc.co.uk/bitesize/topics/z7tp34j) se basa en 4 pilares (Descomposición, reconocimiento de patrones, algoritmos y abstracción) haciendo una mención especial a la </span></span>**<span style="vertical-align: inherit;"><span style="vertical-align: inherit;">evaluación</span></span>**<span style="vertical-align: inherit;"><span style="vertical-align: inherit;"> . </span><span style="vertical-align: inherit;">En otros estudios podrás encontrar otras clasificaciones más detalladas. </span><span style="vertical-align: inherit;">En el módulo 2 de este curso: actividades desenchufadas,</span></span> <span style="vertical-align: inherit;"><span style="vertical-align: inherit;">se trabaja con estos cuatro pilares mas otros dos: Modelado y simulación, y Evaluación.</span></span> Te explicamos aquí los fundamentales:

- **Descomposición** - Dividir un problema o sistema complejo en partes más pequeñas y manejables.
- **Reconocimiento de patrones** – Buscar similitudes entre problemas y dentro del problema.
- **Abstracción** – Centrarse sólo en la información importante, ignorando los detalles irrelevantes.
- **Algoritmos** - desarrollar una solución pasos a paso, o establecer reglas a seguir para resolver el problema.

Los cuatro pilares son **importantes**. Son como las patas de una mesa: si falta una pata, la mesa se caerá. La aplicación correcta de las cuatro técnicas ayudará a la hora de programar un ordenador.

### **El pensamiento computacional en la práctica**

Un **problema complejo** es aquel que, a primera vista, no sabemos cómo resolver fácilmente.

El pensamiento computacional implica coger ese problema complejo y dividirlo en una serie de problemas pequeños y más manejables (**descomposición**). Luego, cada uno de estos problemas más pequeños se puede analizar individualmente, considerando cómo se han resuelto problemas similares anteriormente (**reconocimiento de patrones**) y centrándose solo en los detalles importantes, mientras se ignora la información irrelevante (**abstracción**). A continuación se pueden diseñar pasos o reglas simples para resolver<span class="Apple-converted-space"> </span>cada uno de los problemas más pequeños (**algoritmo**).

Finalmente, estos pasos simples o reglas son usados para **programar un ordenador**<span class="Apple-converted-space">  </span>o para ayudar a **resolver un problema complejo** de manera más eficaz.

## **Pensar de forma computacional**

**Pensar de forma computacional no es programar**. Ni siquiera es pensar como un ordenador, ya que los ordenadores no pueden pensar.

En pocas palabras, la programación dice a un ordenador qué hacer y cómo hacerlo. El pensamiento computacional te permite **averiguar exactamente qué decir al ordenador que haga**. Es por tanto una **habilidad humana**, independiente del uso de ordenadores.<span class="Apple-converted-space"> </span>

Por ejemplo, si quedas en reunirte con tus amigos en algún lugar en el que nunca has estado antes, probablemente planificarás tu ruta antes de salir de casa. Puedes considerar las rutas disponibles y qué ruta es la “mejor”. Esta podría ser la ruta más corta, la más rápida o la que pasa por tu tienda favorita en el camino. Luego seguirías las instrucciones paso a paso hasta llegar allí. En este caso, la parte de planificación es como el pensamiento computacional, y seguir las instrucciones es como programar.

Ser capaz de convertir un problema complejo en uno que podamos entender fácilmente es una **habilidad** que es **extremadamente útil**. De hecho, es una habilidad que ya tienes y que probablemente uses todos los días.<span class="Apple-converted-space"> </span>

Por ejemplo, puede ser que necesites decidir qué hacer con tu grupo de amigos/as. Si a todos/as os gustan cosas diferentes, tendréis que **decidir**:

- ¿Qué podríamos hacer?
- ¿Dónde podríamos ir?
- ¿Quién quiere hacer qué?
- ¿Qué hemos hecho en el pasado que fue un éxito?
- ¿Con cuánto dinero contamos y cuánto cuesta cada opción posible?
- ¿Qué previsión de tiempo dan?
- ¿De cuánto tiempo disponemos?

Con toda esta **información**, tú y tus amigos/as podréis decidir más fácilmente a dónde ir y qué hacer y que la mayoría esté **conforme**. También podrías usar un ordenador para ayudarte a recopilar y analizar los datos para idear **la mejor solución** al problema, tanto ahora como si volviera a surgir en el futuro.

[![amigas.jpg](https://libros.catedu.es/uploads/images/gallery/2023-06/scaled-1680-/amigas.jpg)](https://libros.catedu.es/uploads/images/gallery/2023-06/amigas.jpg)

Otro ejemplo puede ser al jugar a un **videojuego**. Dependiendo del juego, para completar un nivel necesitarás saber:

- ¿Qué artículos necesitas recoger?
- ¿Cómo puedes recogerlos?
- ¿Cuánto tiempo tienes para recogerlos?
- ¿Dónde está la salida?
- ¿La mejor ruta para llegar a ella en el menor tiempo posible?
- ¿Qué tipo de enemigos hay?
- ¿Cuáles son sus puntos débiles?

A partir de estos detalles puedes elaborar una **estrategia** para completar el nivel de la manera más **eficiente**.

Si tuvieras que crear tu propio juego, estas **preguntas** son exactamente las que tendrías que plantearte y responder antes de programar el juego.

Los dos ejemplos anteriores son ejemplos de cómo se ha utilizado el pensamiento computacional para resolver un problema complejo:

- Cada problema complejo se ha dividido en partes más simples - **descomposición.**

[![01-DES-AZ.png](https://libros.catedu.es/uploads/images/gallery/2023-06/scaled-1680-/01-des-az.png)](https://libros.catedu.es/uploads/images/gallery/2023-06/01-des-az.png)

- Se utilizó el conocimiento de problemas similares - **reconocimiento de patrones**.

[![02-PAT-AZ.png](https://libros.catedu.es/uploads/images/gallery/2023-06/scaled-1680-/02-pat-az.png)](https://libros.catedu.es/uploads/images/gallery/2023-06/02-pat-az.png)

- Solo se centraron en los detalles relevantes - **abstracción.**

[![03-ABS-AZ.png](https://libros.catedu.es/uploads/images/gallery/2023-06/scaled-1680-/03-abs-az.png)](https://libros.catedu.es/uploads/images/gallery/2023-06/03-abs-az.png)

- Para elaborar un plan de acción paso a paso -**algoritmo.**

[![05-ALG-AZ.png](https://libros.catedu.es/uploads/images/gallery/2023-06/scaled-1680-/05-alg-az.png)](https://libros.catedu.es/uploads/images/gallery/2023-06/05-alg-az.png)

<p class="callout info">Si quieres **saber más,** y practicar tu inglés, mira este vídeo:<iframe allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" allowfullscreen="allowfullscreen" frameborder="0" height="315" src="https://www.youtube.com/embed/Nc-V948dXWI" title="YouTube video player" width="560"></iframe>

</p>

<p class="callout info">Computational Thinking and problem solving, by Miles Berry [Europe Code Week](https://www.youtube.com/@CodeWeekEU)</p>

# Pilares del pensamiento computacional: Descomposición

## **<span style="vertical-align: inherit;"><span style="vertical-align: inherit;">Descomposición: Divide y vencerás</span></span>**

[![divide y venceras2.jpg](https://libros.catedu.es/uploads/images/gallery/2023-06/scaled-1680-/divide-y-venceras2.jpg)](https://libros.catedu.es/uploads/images/gallery/2023-06/divide-y-venceras2.jpg)

Imagen de pikisuperstar en [Freepik](https://www.freepik.es/vector-gratis/coleccion-personajes-mitologia-griega-dibujados-mano_25643910.htm#query=romano&position=1&from_view=search&track=sph)

### **<span style="vertical-align: inherit;"><span style="vertical-align: inherit;">¿Qué es la descomposición?</span></span>**

**[![01-DES-AZ.png](https://libros.catedu.es/uploads/images/gallery/2023-06/scaled-1680-/01-des-az.png)](https://libros.catedu.es/uploads/images/gallery/2023-06/01-des-az.png)**

<span style="vertical-align: inherit;"><span style="vertical-align: inherit;">Antes de que se pueda **resolver** un problema, se debe **comprender** el problema y las **formas** en que se puede resolver. </span><span style="vertical-align: inherit;">La descomposición implica **dividir** un problema o sistema complejo en partes más pequeñas que son más **manejables** y fáciles de entender. </span><span style="vertical-align: inherit;">Luego, las partes más pequeñas se pueden **examinar y resolver**, o diseñar individualmente, ya que es más fácil trabajar con ellas.</span></span><span class="Apple-converted-space"> </span>

**<span style="vertical-align: inherit;"><span style="vertical-align: inherit;">¿Por qué es importante la descomposición?</span></span>**

<span style="vertical-align: inherit;"><span style="vertical-align: inherit;">Si un problema **no** se descompone:</span></span><span class="Apple-converted-space"> </span>

- <span style="vertical-align: inherit;"><span style="vertical-align: inherit;">**Es mucho más difícil de resolver**. </span><span style="vertical-align: inherit;">Tratar con muchas variables diferentes a la vez es mucho más difícil que dividir un problema en varios problemas más pequeños y resolver cada uno, de uno en uno. </span><span style="vertical-align: inherit;">Dividir el problema en partes más pequeñas significa que cada problema más pequeño se puede examinar con más detalle.</span></span>
- <span style="vertical-align: inherit;"><span style="vertical-align: inherit;">**Es mucho más difícil de entender**.</span></span><span class="Apple-converted-space"> </span><span style="vertical-align: inherit;"><span style="vertical-align: inherit;">Tratar de entender cómo funciona un sistema complejo es más fácil fijándose en cada uno de los sub-sistemas. </span><span style="vertical-align: inherit;">Por ejemplo, entender cómo funciona una bicicleta es más sencillo si toda la bicicleta se separa en partes más pequeñas y se examina cada parte para ver cómo funciona con más detalle.</span></span>

### **<span style="vertical-align: inherit;"><span style="vertical-align: inherit;">La descomposición en la práctica</span></span>**

<span style="vertical-align: inherit;"><span style="vertical-align: inherit;">Hacemos muchas **tareas a diario** sin siquiera pensar en ellas, o descomponerlas, como lavarnos los dientes.</span></span>

#### **<span style="vertical-align: inherit;"><span style="vertical-align: inherit;">Ejemplo 1: Lavarnos los dientes</span></span>**

[![dientes.png](https://libros.catedu.es/uploads/images/gallery/2023-06/scaled-1680-/dientes.png)](https://libros.catedu.es/uploads/images/gallery/2023-06/dientes.png)

<span style="vertical-align: inherit;"><span style="vertical-align: inherit;">Para descomponer el problema de cómo lavarnos los dientes, necesitaríamos considerar:</span></span>

- <span style="vertical-align: inherit;"><span style="vertical-align: inherit;">¿Qué cepillo usar?</span></span>
- <span style="vertical-align: inherit;"><span style="vertical-align: inherit;">¿Cuánto tiempo estar cepillándome los dientes?</span></span>
- <span style="vertical-align: inherit;"><span style="vertical-align: inherit;">¿Cuánta presión debo hacer con el cepillo?</span></span>
- <span style="vertical-align: inherit;"><span style="vertical-align: inherit;">¿Qué pasta usar?</span></span>

#### **<span style="vertical-align: inherit;"><span style="vertical-align: inherit;">Ejemplo 2: Resolver un crimen</span></span>**

[![crimen.jpg](https://libros.catedu.es/uploads/images/gallery/2023-06/scaled-1680-/crimen.jpg)](https://libros.catedu.es/uploads/images/gallery/2023-06/crimen.jpg)

<span style="vertical-align: inherit;"><span style="vertical-align: inherit;">Normalmente, solo cuando se nos pide que hagamos una tarea nueva o más compleja, comenzamos a pensar en ella en detalle, a descomponer la tarea.</span></span>

<span style="vertical-align: inherit;"><span style="vertical-align: inherit;">**Imagina que se ha cometido un crimen**. </span><span style="vertical-align: inherit;">Resolver un crimen puede ser un problema muy **complejo** ya que hay muchas cosas a considerar.</span></span>

<span style="vertical-align: inherit;"><span style="vertical-align: inherit;">Por ejemplo, la policía deberá averiguar la respuesta a una serie de **problemas menores**:</span></span>

- <span style="vertical-align: inherit;"><span style="vertical-align: inherit;">¿Qué crimen ha sido cometido?</span></span>
- <span style="vertical-align: inherit;"><span style="vertical-align: inherit;">¿Cuándo fue cometido el crimen?</span></span>
- <span style="vertical-align: inherit;"><span style="vertical-align: inherit;">¿Dónde fue cometido el crimen?</span></span>
- <span style="vertical-align: inherit;"><span style="vertical-align: inherit;">¿Qué evidencia hay?</span></span>
- <span style="vertical-align: inherit;"><span style="vertical-align: inherit;">¿Hay algún testigo?</span></span>
- <span style="vertical-align: inherit;"><span style="vertical-align: inherit;">¿Han ocurrido crímenes similares?</span></span>

<span style="vertical-align: inherit;"><span style="vertical-align: inherit;">El problema complejo de resolver el delito cometido ahora se ha descompuesto en problemas más simples que pueden ser examinados individualmente, en **detalle**.</span></span>

#### **<span style="vertical-align: inherit;"><span style="vertical-align: inherit;">Ejemplo 3: Crear una aplicación</span></span>**

<span style="vertical-align: inherit;"><span style="vertical-align: inherit;">Imagínate que vas a crear tu primera aplicación. </span><span style="vertical-align: inherit;">Este es un problema complejo en el que hay un montón de cosas a considerar.</span></span>

**<span style="vertical-align: inherit;"><span style="vertical-align: inherit;">¿Cómo descompondrías la tarea de crear una app?</span></span>**

<span style="vertical-align: inherit;"><span style="vertical-align: inherit;">Para descomponer esta tarea, necesitarás encontrar la respuesta a una serie de problemas menores:</span></span>

- <span style="vertical-align: inherit;"><span style="vertical-align: inherit;">¿Qué necesita para cubrir tu aplicación?</span></span>
- <span style="vertical-align: inherit;"><span style="vertical-align: inherit;">¿Qué aspecto tendrá tu app?</span></span>
- <span style="vertical-align: inherit;"><span style="vertical-align: inherit;">¿Quién es el objetivo público de tu app?</span></span>
- <span style="vertical-align: inherit;"><span style="vertical-align: inherit;">¿Qué tipo de gráficos usarás?</span></span>
- <span style="vertical-align: inherit;"><span style="vertical-align: inherit;">¿Qué tipo de audio usarás?</span></span>
- <span style="vertical-align: inherit;"><span style="vertical-align: inherit;">¿Qué tipo de software usarás para crear la app?</span></span>
- <span style="vertical-align: inherit;"><span style="vertical-align: inherit;">¿Cómo navegará el usuario por la aplicación?</span></span>
- <span style="vertical-align: inherit;"><span style="vertical-align: inherit;">¿Cómo probarás la aplicación?</span></span>
- <span style="vertical-align: inherit;"><span style="vertical-align: inherit;">¿Dónde se venderá la aplicación?</span></span>

<span style="vertical-align: inherit;"><span style="vertical-align: inherit;">Esta lista ha **desglosado** el problema complejo de crear una aplicación en problemas mucho más simples, que ahora se pueden resolver. </span><span style="vertical-align: inherit;">También puedes hacer que **otras personas** te ayuden con diferentes partes individuales de la aplicación. </span><span style="vertical-align: inherit;">Por ejemplo, puedes conocer a alguien que pueda crear los gráficos…</span></span>

[![aplicación.png](https://libros.catedu.es/uploads/images/gallery/2023-06/scaled-1680-/app.png)](https://libros.catedu.es/uploads/images/gallery/2023-06/app.png)

<p class="callout success">**<span style="vertical-align: inherit;"><span style="vertical-align: inherit;">IDEA</span></span>**<span style="vertical-align: inherit;"><span style="vertical-align: inherit;"> </span><span style="vertical-align: inherit;">Descomponer tareas cotidianas: prepara un bocadillo, prepara una excursión… (cuanto más cercana sea la tarea a la experiencia del alumnado mejor).</span></span></p>

<p class="callout success">**<span style="vertical-align: inherit;"><span style="vertical-align: inherit;">IDEA </span></span>**<span style="vertical-align: inherit;"><span style="vertical-align: inherit;">Descomponer una figura geométrica en figuras sencillas ya conocidas.</span></span><span class="Apple-converted-space"> </span></p>

[![figura geometrica compleja.jpg](https://libros.catedu.es/uploads/images/gallery/2023-06/scaled-1680-/figura-geometrica-compleja.jpg)](https://libros.catedu.es/uploads/images/gallery/2023-06/figura-geometrica-compleja.jpg)

<p class="callout success">**<span style="vertical-align: inherit;"><span style="vertical-align: inherit;">IDEA</span></span>**<span style="vertical-align: inherit;"><span style="vertical-align: inherit;"> </span><span style="vertical-align: inherit;">Jugar al tangram</span></span></p>

[![tangram.jpg](https://libros.catedu.es/uploads/images/gallery/2023-06/scaled-1680-/tangram.jpg)](https://libros.catedu.es/uploads/images/gallery/2023-06/tangram.jpg)

<p class="callout success">**<span style="vertical-align: inherit;"><span style="vertical-align: inherit;">IDEA</span></span>**<span style="vertical-align: inherit;"><span style="vertical-align: inherit;"> </span><span style="vertical-align: inherit;">hacer mapas mentales</span></span></p>

# Pilares del pensamiento computacional: Reconocimiento de patrones

## **Reconocimiento de patrones: Esto lo he visto antes…**

[![esto me suena.jpg](https://libros.catedu.es/uploads/images/gallery/2023-06/scaled-1680-/esto-me-suena.jpg)](https://libros.catedu.es/uploads/images/gallery/2023-06/esto-me-suena.jpg)

### **¿Qué es reconocimiento de patrones?**

[![02-PAT-AZ.png](https://libros.catedu.es/uploads/images/gallery/2023-06/scaled-1680-/02-pat-az.png)](https://libros.catedu.es/uploads/images/gallery/2023-06/02-pat-az.png)

El **reconocimiento de patrones** es uno de los cuatro pilares del pensamiento computacional. Implica **encontrar patrones entre problemas pequeños y descompuestos**.<span class="Apple-converted-space"> </span>A menudo, cuando descomponemos un problema complejo encontramos patrones entre los problemas más pequeños que creamos. **Identificar** estas similitudes nos ayuda a resolver problemas más complejos de manera más **eficiente**. Los patrones son pues, similitudes, estructuras repetitivas, características comunes…

### **¿Qué son patrones?**

Imagina que queremos dibujar una **serie de gatos**.

Todos los gatos comparten **características comunes**. Entre otras cosas, todos tienen ojos, cola y pelaje. También les gusta comer pescado y maullar.

Como sabemos que todos los gatos tienen ojos, cola y pelaje, podemos hacer un buen intento de **dibujar un gato** simplemente incluyendo estas características comunes.

En el pensamiento computacional, estas características se conocen como **patrones**. Una vez que sabemos cómo describir un gato, podemos describir otros, simplemente siguiendo este patrón. Lo único que es diferente son los detalles:

- Un gato puede tener ojos verdes, cola larga y pelaje negro.
- Otro gato puede tener ojos amarillos, cola corta y pelaje rayado.

[![gatos_pc.jpg](https://libros.catedu.es/uploads/images/gallery/2023-06/scaled-1680-/gatos-pc.jpg)](https://libros.catedu.es/uploads/images/gallery/2023-06/gatos-pc.jpg)

### **¿Porqué necesitamos buscar patrones?**

Encontrar patrones es **extremadamente importante**. Los patrones **simplifican** nuestra tarea. Los problemas son más fáciles de resolver cuando comparten patrones, porque podemos usar **una misma resolución** donde exista un determinado patrón.

Cuantos más patrones podamos encontrar, más fácil y rápida será nuestra tarea general de resolución de problemas.

Si queremos dibujar varios gatos, encontrar un patrón para describir a los gatos en general, como por ejemplo que todos tienen ojos, cola y pelaje, hace que esta tarea sea más **rápida** y **sencilla**.

Sabemos que todos los gatos siguen este patrón, así que no tenemos que detenernos cada vez que empezamos a dibujar un nuevo gato para resolver esto. A partir de los patrones que sabemos que siguen los gatos, podemos dibujar rápidamente varios gatos.

[![dibujar_gato.jpg](https://libros.catedu.es/uploads/images/gallery/2023-06/scaled-1680-/dibujar-gato.jpg)](https://libros.catedu.es/uploads/images/gallery/2023-06/dibujar-gato.jpg)

### **¿Qué ocurre cuando no buscamos un patrón?**

Supongamos que no hubiéramos buscado patrones en los gatos. Cada vez que quisiéramos dibujar un gato, tendríamos que **detenernos** y **averiguar** cómo era un gato. Esto nos **retrasaría**.

Aún así, podríamos dibujar a nuestros gatos, y se reconocerían como gatos, pero **tardaríamos más** en dibujar cada gato. Esto sería muy **ineficiente** y una mala manera de resolver la tarea de dibujar gatos.

Además, si no buscamos patrones, es posible que **no** nos demos cuenta de que todos los gatos tienen ojos, cola y pelaje. Cuando están dibujados, es posible que nuestros gatos **ni siquiera parezcan gatos**. En este caso, al no reconocer el patrón, estaríamos resolviendo el problema incorrectamente.

### **Reconocimiento de patrones dentro del mismo problema o entre problemas diferentes**

Para encontrar patrones en problemas buscamos elementos que son iguales (o muy similares) en cada problema. Puede resultar que no existan características comunes entre los problemas, pero aun así deberíamos buscar.

Existen patrones entre **diferentes** problemas y **dentro** de problemas individuales. Tenemos que buscar los dos.

#### **Patrones entre diferentes problemas**

Para encontrar patrones entre problemas, buscamos cosas que sean iguales (o muy similares) para cada problema.

Por ejemplo, descomponer la tarea de **hornear un pastel** supone que conozcamos las soluciones a una serie de problemas más pequeños:

- <span class="s1">Qué tipo de pastel queremos hornear</span>
- <span class="s1">Qué ingredientes necesitamos y cuánto de cada uno</span>
- <span class="s1">Para cuántas personas queremos hacer el pastel</span>
- <span class="s1">Cuánto tiempo tenemos que hornear el pastel</span>
- <span class="s1">Cuándo necesitamos agregar cada ingrediente</span>
- <span class="s1">Qué equipo necesitamos</span>

Una vez que sabemos cómo hornear un tipo particular de pastel, podemos ver que **hornear otro tipo de pastel** no es tan diferente, porque existen **patrones**.

Por ejemplo:

- <span class="s1">Cada pastel necesitará una cantidad precisa de ingredientes específicos.</span>
- <span class="s1">Los ingredientes se agregarán en un momento concreto.</span>
- <span class="s1">Cada pastel se horneará durante un período de tiempo concreto.</span>

**Tenemos los patrones identificados, podemos trabajar en soluciones comunes entre los problemas.**

[![pasteles.jpg](https://libros.catedu.es/uploads/images/gallery/2023-06/scaled-1680-/pasteles.jpg)](https://libros.catedu.es/uploads/images/gallery/2023-06/pasteles.jpg)

#### **Patrones dentro de los problemas**

Los patrones también pueden existir **dentro** de los problemas más pequeños, en los que<span class="Apple-converted-space"> </span>hemos descompuesto el problema.

Si nos fijamos en hornear un pastel, por ejemplo, para cada pastel se necesitará una **cantidad precisa** de ingredientes específicos, cada ingrediente necesita:

- <span class="s1">Identificar el ingredientes (nombrarlo)</span>
- <span class="s1">Una medida específica</span>

Una vez que sabemos cómo identificar cada ingrediente y su cantidad, podemos aplicar ese patrón a todos los ingredientes. Una vez más, todo lo que cambia son los **detalles**.

El reconocimiento de patrones dentro de un problema es sencillo de ver si nos **imaginamos** que estamos haciendo un pastel con una niña o niño. Si por ejemplo hacemos un bizcocho cuyos ingredientes son: harina, azúcar, cacao en polvo, levadura, yogurt y huevos. Podemos hacer juntas la tarea de **agregar la harina**. **Miramos la cantidad requerida, la pesamos y la apartamos en un bol**. Una vez hecho, puedo pedir a mi compi que haga sola o solo el paso correspondiente al azúcar. Para ello empleará el **mismo procedimiento** que hemos empleando para la harina, es decir, usará un **patrón**. Este mismo puede repetirse para otros ingredientes como el cacao o la levadura. **Son patrones dentro del mismo problema.**

<p class="callout success">**IDEAS**. Además de usar soportes tipo ficha como los que usaremos en el módulo 2, puedes utilizar otros soportes y realizar estas actividades de manera transversal en varias asignaturas y eventos escolares. <span class="s1">**Bloques de construcción:** Usando color, forma o ambos elementos. </span><span class="s1">**Hacer collares, pulseras, guirnaldas** para navidad o la fiesta de fin de curso, elementos para decorar el aula. </span><span class="s1">**Patrones musicales y rítmicos:** En esta actividad puedes implica todo el cuerpo. **Secuencias con plastilina**.</span></p>

**[![patrones en el aula.jpg](https://libros.catedu.es/uploads/images/gallery/2023-06/scaled-1680-/patrones-en-el-aula.jpg)](https://libros.catedu.es/uploads/images/gallery/2023-06/patrones-en-el-aula.jpg)**

<p class="callout success"><span class="s1">Los **edificios** escolares a menudo siguen patrones, por ejemplo en las baldosa, en cada cuanto hay una ventana, donde están los baños, tal vez los ciclos estén identificados por colores…. podéis jugar a encontrar los de vuestra escuela.</span></p>

<p class="callout success"><span class="s1">**Juegos de mesa tipo el SET**.<span class="Apple-converted-space"> R</span>ecomendado para mayores de 6 años y con partidas de entre 10 y 20 min de duración. En él usamos unas cartas con diferentes atributos de color, cantidad, forma y tipo de relleno para crear los patrones y hacer tríos de cartas según los que definamos. Es un juego complejo ya que incluye patrones de diferencia, es decir, yo puedo asociar cartas porque tienen todas el mismo color o porque ningún color esta repetido. A su vez, puedo combinar patrones de igualdad y de diferencia. Puedo hacer un trio donde: todas las cartas tengan el mismo color, no se repita ninguna forma , no se repita ningún fondo y haya la misma cantidad de elementos. Las combinaciones son múltiples. Si no te ha quedado claro, lo mejor es que mires el siguiente video: </span></p>

<iframe allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" allowfullscreen="allowfullscreen" frameborder="0" height="315" src="https://www.youtube.com/embed/7UOjO712O2M" title="YouTube video player" width="560"></iframe>

<p class="callout warning">Este es un juego competitivo. Esto puede suponer un problema a la hora de llevarlo al aula dependiendo del grupo que tengas y los recursos de los que dispongas. Una variante del juego puede ser que en vez de jugar a ver quién hace más sets sea a ver cuántos sets pueden hacer entre todas las personas que están jugando en un tiempo limitado.</p>

# Pilares del pensamiento computacional: Abstracción

## **Abstracción. Me sirve, no me sirve**

**[![me sirve no me sirve.jpg](https://libros.catedu.es/uploads/images/gallery/2023-06/scaled-1680-/me-sirve-no-me-sirve.jpg)](https://libros.catedu.es/uploads/images/gallery/2023-06/me-sirve-no-me-sirve.jpg)**

### **¿Qué es la abstracción?**

[![03-ABS-AZ.png](https://libros.catedu.es/uploads/images/gallery/2023-06/scaled-1680-/03-abs-az.png)](https://libros.catedu.es/uploads/images/gallery/2023-06/03-abs-az.png)

Una vez que hemos reconocido patrones en nuestros problemas, usamos la abstracción para **reunir las características generales y filtrar los detalles** que no necesitamos para resolver nuestro problema para así concentrarnos en las que sí necesitamos.

En el pensamiento computacional, cuando descomponemos un problema, buscamos patrones con problemas similares o dentro del mismo problema que simplifiquen el problema complejo. Cuando abstraemos, **filtramos**, nos quedamos sólo con la **información relevante**. <span class="s2">A partir de esto creamos una **representación** (idea) de lo que estamos tratando de resolver.</span>

### **¿Cuáles son los detalles o características específicas?**

En el reconocimiento de patrones, analizamos el problema de tener que dibujar una serie de gatos.

Notamos que todos los gatos tienen **características generales**, que son comunes a todos los gatos, por ejemplo, ojos, cola, pelaje, gusto por los peces y la capacidad de hacer maullidos. Además, cada gato tiene **características específicas**, como pelaje negro, cola larga, ojos verdes, amor por el salmón y un fuerte maullido. Estos detalles se conocen como específicos.

Para dibujar un gato básico, necesitamos saber que tiene cola, pelaje y ojos. Estas características son **relevantes**. No necesitamos saber qué sonido hace un gato o que le gusta el pescado. Estas características son **irrelevantes** y se pueden filtrar.

A partir de las características generales que tenemos (cola, pelaje, ojos) podemos construir una **idea básica de un gato**, es decir, cómo es básicamente un gato. Es entonces cuando podemos describir cómo dibujar un gato básico.

[![dibujar_gato.jpg](https://libros.catedu.es/uploads/images/gallery/2023-06/scaled-1680-/dibujar-gato.jpg)](https://libros.catedu.es/uploads/images/gallery/2023-06/dibujar-gato.jpg)

### **¿Por qué la abstracción es importante?**

La abstracción nos permite crear una idea general de cuál es el problema y cómo resolverlo. El proceso nos indica que eliminemos todos los detalles específicos y cualquier patrón que no nos ayude a resolver nuestro problema. Esto **nos ayuda a formar nuestra idea del problema**. Esta idea se conoce como un "modelo".

Si no abstraemos, podemos terminar con una **solución incorrecta** al problema que estamos tratando de resolver. Con nuestro ejemplo del gato, si no hiciéramos abstracción, podríamos pensar que todos los gatos tienen colas largas y pelaje corto. Habiéndonos abstraído, sabemos que aunque los gatos tienen cola y pelaje, no todas las colas son largas y no todo el pelaje es corto. En este caso, la abstracción nos ha ayudado a formar **un modelo más claro** de un gato.

### **Cómo abstraer**

La abstracción es la **recopilación de las características generales** que necesitamos y la **filtración** de los detalles y características que **no** necesitamos.

Al hornear un pastel, hay algunas características **generales** entre los pasteles. Por ejemplo:

- Un pastel necesita ingredientes
- Cada ingrediente necesita una cantidad específica
- Un pastel necesita un tiempo de horneado

Al abstraer, **eliminamos detalles específicos** y mantenemos los patrones generales relevantes.

### [![patrones_gen_espe.jpg](https://libros.catedu.es/uploads/images/gallery/2023-06/scaled-1680-/patrones-gen-espe.jpg)](https://libros.catedu.es/uploads/images/gallery/2023-06/patrones-gen-espe.jpg)<span class="s1">**Creando un modelo**</span>

**Un modelo es una idea general del problema que estamos tratando de resolver**

Por ejemplo, un gato modelo sería cualquier gato. No es un gato específico con cola larga y pelaje corto: el modelo representa a **todos los gatos**. A partir de nuestro modelo de gatos, podemos aprender cómo es cualquier gato, usando los patrones que comparten todos los gatos.

Del mismo modo, al hornear un pastel, un pastel modelo no sería un pastel específico, como un bizcocho o un pastel de frutas. En cambio, el modelo representaría todos los pasteles. A partir de este modelo podemos aprender a hornear cualquier pastel, utilizando los patrones que se aplican a todos los pasteles.

Una vez que tenemos un **modelo** de nuestro problema, podemos diseñar un **algoritmo** para resolverlo.

# Pilares del pensamiento computacional: Algoritmos

## **Algoritmos. Vamos paso a paso**

[![PASO A PASO.jpg](https://libros.catedu.es/uploads/images/gallery/2023-06/scaled-1680-/paso-a-paso.jpg)](https://libros.catedu.es/uploads/images/gallery/2023-06/paso-a-paso.jpg)

Un algoritmo es un plan, un **conjunto de instrucciones paso a paso** para resolver un problema. En un algoritmo se **identifica** cada instrucción y se **planifica** el orden en que se deben ejecutar.

### **¿Qué es un algoritmo?**

[![05-ALG-AZ.png](https://libros.catedu.es/uploads/images/gallery/2023-06/scaled-1680-/05-alg-az.png)](https://libros.catedu.es/uploads/images/gallery/2023-06/05-alg-az.png)

Los algoritmos son uno de los cuatro pilares del pensamiento computacional. Un algoritmo es un **plan**, un conjunto de instrucciones paso a paso para resolver un problema. Si puedes atarte los cordones de los zapatos, preparar una taza de té, vestirte o preparar una comida, entonces ya sabes **cómo seguir un algoritmo**.

En un algoritmo se **identifica** cada instrucción y se **planifica** el orden en el que se deben llevar a cabo. Los algoritmos a menudo se usan como **punto de partida** para crear un programa de ordenador y, a veces, se escriben como un <span class="s2">**diagrama de flujo** o en **pseudo-código**.</span>

Si queremos decirle a un ordenador que haga algo, tenemos que escribir un programa informático que le diga al ordenador, paso a paso, exactamente **qué** queremos que haga y **cómo** queremos que lo haga. Este programa paso a paso necesitará planificación, y para hacerlo usamos un algoritmo.

**Las ordenadores son tan buenos como los algoritmos que se les da**. Si introduces en el ordenador un algoritmo deficiente, obtendrás un resultado deficiente.

Los algoritmos se utilizan para muchas cosas diferentes, incluidos los cálculos, el procesamiento de datos y la automatización.

### **Haciendo un plan**

Es importante planificar la solución a un problema para asegurarse de que será correcta. Usando el pensamiento computacional y la descomposición, podemos dividir el problema en partes más pequeñas y luego podemos planificar cómo volver a encajarlo en un **orden adecuado** para resolver el problema.

Este orden se puede representar como un algoritmo. **Un algoritmo debe ser claro**.

Debe tener:

- un punto de partida
- un punto de llegada
- un conjunto de instrucciones claras entre ambos.

[![HACIENDO UN PLAN.jpg](https://libros.catedu.es/uploads/images/gallery/2023-06/scaled-1680-/haciendo-un-plan.jpg)](https://libros.catedu.es/uploads/images/gallery/2023-06/haciendo-un-plan.jpg)

### **Representación de un algoritmo: Pseudo-código**

Hay dos formas principales en que se pueden representar los algoritmos: **pseudo-código** y **diagramas de flujo**.

La mayoría de los programas se desarrollan utilizando **lenguajes de programación**. Estos lenguajes tienen una **sintaxis** específica que debe usarse para que el programa funcione correctamente. El **pseudo-código** no es un lenguaje de programación, es una forma simple de describir un conjunto de instrucciones que **no** tiene que usar una sintaxis específica.

Escribir en pseudo-código es **similar** a escribir en un lenguaje de programación. Cada paso del algoritmo está escrito en una **línea propia** en secuencia. Por lo general, las instrucciones se escriben en mayúsculas, las variables en minúsculas y los mensajes en forma de oración.

En pseudo-código, **ENTRADA** hace una pregunta. **SALIDA** imprime un mensaje en pantalla.

Se podría crear un programa simple para preguntarle a alguien su nombre y edad, y hacer un comentario basado en esto. Este programa representado en pseudo-código tendría este aspecto:

SALIDA “Cómo te llamas?”

ENTRADA el usuario introduce, teclea, su nombre

ALMACENAR la entrada del usuario en la variable **nombre**

SALIDA “Hola” + nombre

SALIDA “¿Qué edad tienes?”

ENTRADA el usuario introduce su edad

ALMACENAR la entrada del usuario en la variable **edad**

SI edad &gt;= 70 ENTONCES

 SALIDA “¡Estás estupendo!”

SI NO

 SALIDA “¡Eres un chaval!”

<p class="callout success"><span class="s4">**IDEA**. </span>Pueden jugar a **guiar el dibujo** de otra persona. Una persona da las instrucciones, por ejemplo: dibuja un círculo, haz unos triángulos saliendo del círculo, dibuja una casa debajo del círculo…. Puede haber varias personas dibujando lo que una persona indica. Las diferencias entre los dibujos en parte se deberán a la que **las instrucciones no han sido lo suficientemente concretas**. A medida que jueguen irán **afinando** las instrucciones, por ejemplo: dibuja un círculo de 3 cm de diámetro en el centro del la hoja, haz 5 triángulos iguales saliendo del círculo. Los triángulos tienen dos lados iguales, la base es el trazado del círculo y no es igual a los lados, dibuja una casa debajo del círculo, compuesta por un tejado triangular igual a los que has dibujado para hacer el sol…. Para facilitar el trabajo puedes ofrecerles papel cuadriculado para hacer esta actividad y entregarles fichas a los que deben describir para que las otras personas dibujen o que lo hagan de manera libre.</p>

<p class="callout success">**IDEA**. Hacer un pseudo-código para hacer **tareas sencillas**, como ir al baño, sacar punta a un lápiz, levantar una silla….. Cada equipo escribe las instrucciones y se las pasa a otro equipo. El otro equipo las tiene que seguir al pie de la letra y hacer **solo** lo que pone en las instrucciones.</p>

<p class="callout success">**IDEA**. Tal vez conozcas el texto de **Julio Cortazar** “Instrucciones para subir una escalera”. Puede ser divertido escoger textos de instrucciones y usarlos de base para hacer un pseudo-código. O coger un pseudo-código sencillo y convertirlo en un texto difícil de entender cómo es el caso de este cuento. También puedes adaptar el cuento para que no se sepa de qué se habla y jugar a adivinar. A partir de aquí puedes animarles ha hacer su propio cuento , en el que describan una actividad que las demás deban adivinar. Una posibilidad de **adaptación** podrías ser: “Instrucciones para realizar una tarea misteriosa”: "*Nadie habrá dejado de observar que con frecuencia el suelo se pliega de manera tal que una parte sube en ángulo recto con el plano del suelo, y luego la parte siguiente se coloca paralela a este plano, para dar paso a una nueva perpendicular, conducta que se repite en espiral o en línea quebrada hasta alturas sumamente variables. Agachándose y poniendo la mano izquierda en una de las partes verticales, y la derecha en la horizontal correspondiente, se está en posesión momentánea de un segmento. Cada uno de estos segmentos, formados como se ve por dos elementos, se sitúa un tanto más arriba y adelante que el anterior, principio que da sentido a la estructura, ya que cualquiera otra combinación producirá formas quizá más bellas o pintorescas, pero incapaces de cumplir su función. Estas estructuras se encaran de frente, pues hacia atrás o de costado resultan particularmente incómodas. La actitud natural consiste en mantenerse de pie, los brazos colgando sin esfuerzo, la cabeza erguida aunque no tanto que los ojos dejen de ver los peldaños inmediatamente superiores al que se pisa, y respirando lenta y regularmente. Para realizar nuestra tarea misteriosa se comienza por levantar esa parte del cuerpo situada a la derecha abajo, envuelta casi siempre en cuero o gamuza, y que salvo excepciones cabe exactamente en el segmento. Puesta en el primer segmento dicha parte, que para abreviar llamaremos pie, se recoge la parte equivalente de la izquierda (también llamada pie, pero que no ha de confundirse con el pie antes citado), y llevándola a la altura del pie, se le hace seguir hasta colocarla en el segundo segmento, con lo cual en éste descansará el pie, y en el primero descansará el pie. (Los primeros segmentos son siempre los más difíciles, hasta adquirir la coordinación necesaria. La coincidencia de nombre entre el pie y el pie hace difícil la explicación. Cuídese especialmente de no levantar al mismo tiempo el pie y el pie). Llegado en esta forma al segundo segmento, basta repetir alternadamente los movimientos hasta encontrarse con el final de la estructura. Se sale de ella fácilmente, con un ligero golpe de talón que la fija en su sitio, del que no se moverá hasta el momento del descenso"*</p>

[![txt-misterioso.jpg](https://libros.catedu.es/uploads/images/gallery/2023-06/scaled-1680-/txt-misterioso.jpg)](https://libros.catedu.es/uploads/images/gallery/2023-06/txt-misterioso.jpg)

<p class="callout success">**IDEA**. Jugar a ser **robots**: Se puede jugar por tríos:<span class="Apple-converted-space"> </span>una persona es un robot tipo BeeBot, otra quien programa y la tercera al ver el código escrito tiene que **adivinar a dónde llegará** el “robot”. Quien programa escribe la secuencia usando flechas, se lo muestra a quien adivina y este hace una predicción. Luego se “programa” a quien hace de robot haciendo como que tiene una botonera en la espalda ( adelante, atrás, izquierda, derecha). El juego aumenta la dificultad si quien hace de robot tiene los **ojos vendados** o si pones **obstáculos**. Facilita el juego hacerlo en un lugar donde haya baldosas o similares que delimiten cuál es la unidad de desplazamiento.</p>

[![IT10077-BEEBOT.jpg](https://libros.catedu.es/uploads/images/gallery/2023-06/scaled-1680-/it10077-beebot.jpg)](https://libros.catedu.es/uploads/images/gallery/2023-06/it10077-beebot.jpg)

Si no conoces como funciona la Beebot te dejamos un video, podrás ver cómo funciona a partir de el minuto 1: 47

<iframe allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" allowfullscreen="allowfullscreen" frameborder="0" height="315" src="https://www.youtube.com/embed/sqqmH5PwR4s" title="YouTube video player" width="560"></iframe>

### **Representación un algoritmo: diagramas de flujo**

Un diagrama de flujo es una **representación** de un conjunto de instrucciones. Los diagramas de flujo normalmente usan **símbolos** estándar para representar las diferentes instrucciones. Hay pocas reglas reales sobre el **nivel de detalle** necesario en un diagrama de flujo. A veces, los diagramas de flujo se dividen en muchos pasos para brindar muchos detalles sobre lo que está sucediendo exactamente. A veces se simplifican para que una serie de pasos ocurran en un solo paso.

#### **Símbolos del diagrama de flujo**

[![simbolos_diagrama_flujo.jpg](https://libros.catedu.es/uploads/images/gallery/2023-06/scaled-1680-/simbolos-diagrama-flujo.jpg)](https://libros.catedu.es/uploads/images/gallery/2023-06/simbolos-diagrama-flujo.jpg)

Se podría crear un programa simple para preguntarle a alguien su nombre y edad, y hacer un comentario basado en esto. Este programa **representado** como un diagrama de flujo se vería así:

[![diagrama_flujo.jpg](https://libros.catedu.es/uploads/images/gallery/2023-06/scaled-1680-/diagrama-flujo.jpg)](https://libros.catedu.es/uploads/images/gallery/2023-06/diagrama-flujo.jpg)Los diagramas de flujo pueden emplearse para resolver problemas de cualquier naturaleza, sin importa el tema ni la dificultad (de hecho, cuanto más complejo es el problema más útil) Veamos un **ejemplo**:

<iframe allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" allowfullscreen="allowfullscreen" frameborder="0" height="315" src="https://www.youtube.com/embed/3sU6KIxjqMI" title="YouTube video player" width="560"></iframe>

<p class="callout success">**IDEA**. Se pueden crear diagramas de flujo con lápiz y papel pero también hay aplicaciones interesante para hacer diagramas de flujo. Una de ellas es [**Diagrams**](https://app.diagrams.net/). Esta aplicación gratuita y de código abierto ayuda a crear una gran variedad de diagramas en Windows, Linux y macOS, agregando imágenes, configurando los textos y eligiendo el tipo de fuente, etc. El alumnado tendrá la opción de diseñar diagramas de flujo, mapas mentales…. y otro tipo de representaciones aunque para este curso con las que hemos nombrado tenemos suficiente. Su interfaz es muy práctica e intuitiva e incorpora capas que facilitan la edición. Otra opción es **[Mindomo](https://www.mindomo.com/es/logout.htm)**. En este caso no hablamos de software libre. Se trata de un software colaborativo en línea para realizar diagramas de flujo, mapas mentales… y otras muchas cosas… aunque para este curso estas nos parecen las más adecuadas.<span class="Apple-converted-space"> </span>Software Freemium ofrece sus servicios básicos de forma gratuita, si bien se cobra por las funciones prémium. La versión gratuita tiene un límite de tres mapas mentales y funciones prémium inhabilitadas, como carga de audio/video, descarga de PDF, PowerPoint y Excel y protección con contraseña. El software se puede usar desde cualquier navegador web estándar o instalando la aplicación gratuita para escritorio, iPad y Android.</p>

# Evaluación de soluciones

Antes de poder programar las soluciones, es importante **asegurarse de que satisfagan adecuadamente el problema** y que lo hagan de manera **eficiente**. Esto se hace a través de la evaluación.

## <span class="s1">**¿Qué es evaluación?**</span>

Una vez que se ha diseñado una solución utilizando el pensamiento computacional, es importante asegurarse de que la **solución** sea **adecuada** para su propósito.

La evaluación es el proceso que nos permite asegurarnos de que nuestra solución hace el trabajo para el que ha sido diseñada y pensar en cómo se podría mejorar.

Una vez escrito, se debe **verificar** un algoritmo para asegurarse de que:

- <span class="s1">Se entiende fácilmente, ¿está completamente descompuesto?</span>
- <span class="s1">Está completa, ¿resuelve todos los aspectos del problema?</span>
- <span class="s1">Es eficiente, ¿resuelve el problema, haciendo el mejor uso de los recursos disponibles (p. ej., lo más rápido posible usando el menor espacio)?</span>
- <span class="s1">Cumple con cualquier criterio de diseño que se nos haya dado</span>

**Si un algoritmo cumple con estos cuatro criterios, es probable que funcione bien**. Entonces se puede programar el algoritmo.

La falta de evaluación puede dificultar la escritura de un programa. La evaluación ayuda a **garantizar** que se nos encontraremos con la **menor cantidad posible de problemas** al programar la solución.

## **¿Por qué necesitamos evaluar nuestra solución?**

El pensamiento computacional ayuda a resolver problemas y a diseñar una solución, un algoritmo, que se puede usar para programar un ordenador. Sin embargo, **si el algoritmo falla**, puede ser difícil escribir el programa. Peor aún, es posible que el programa terminado no resuelva el problema correctamente.

La evaluación nos permite considerar la solución a un problema, asegurarnos de que cumpla con los criterios de diseño originales, produzca la solución correcta y se ajuste al propósito, **antes de que comience la ejecución.**

## **¿Qué ocurre si no evaluamos una solución?**

Una vez que se ha decidido una solución y se ha diseñado el algoritmo, puede ser **tentador** perderse la etapa de evaluación y comenzar a la etapa de ejecución de inmediato. Sin embargo, sin la evaluación, **no se detectarán los errores** en el algoritmo, y es posible que el programa no resuelva correctamente el problema o no lo resuelva de la mejor manera.

Los fallos pueden ser menores y no muy importantes. Por ejemplo, si se creó una solución a la pregunta "¿cómo dibujar un gato?" y esta tenía errores, todo lo que estaría mal es que el gato dibujado podría no parecerse a un gato.

[![solucion defectuosa.jpg](https://libros.catedu.es/uploads/images/gallery/2023-06/scaled-1680-/solucion-defectuosa.jpg)](https://libros.catedu.es/uploads/images/gallery/2023-06/solucion-defectuosa.jpg)

Sin embargo, los errores pueden tener **efectos enormes y terribles**, por ejemplo, si la solución para el piloto automático de un avión tuviera defectos.

## **Formas en que las soluciones pueden ser defectuosas**

Podemos encontrar que las soluciones fallan **porque**:

- <span class="s1">**El problema no se entiende completamente**; es posible que no lo hayamos descompuesto correctamente</span>
- <span class="s1">**La solución está incompleta**; es posible que algunas partes del problema se hayan omitido accidentalmente</span>
- <span class="s1">**Es ineficiente**; la solución puede ser demasiado complicada o demasiado larga</span>
- <span class="s1">**No cumple con los criterios de diseño originales**, por lo que no es adecuada para su propósito</span>

Una solución defectuosa puede incluir uno o más de estos errores.

### **Soluciones que no se descomponen correctamente**

Si se aplican técnicas de pensamiento computacional al problema de cómo hornear un pastel, al descomponer el problema, es necesario saber:

[![evaluacion tipos.jpg](https://libros.catedu.es/uploads/images/gallery/2023-06/scaled-1680-/evaluacion-tipos.jpg)](https://libros.catedu.es/uploads/images/gallery/2023-06/evaluacion-tipos.jpg)Un diagrama de una **descomposición de ingredientes** se vería así:

[![evaluacion_01.jpg](https://libros.catedu.es/uploads/images/gallery/2023-06/scaled-1680-/evaluacion-01.jpg)](https://libros.catedu.es/uploads/images/gallery/2023-06/evaluacion-01.jpg)

Por el momento, un diagrama de la descomposición adicional del equipo necesario se vería así:

[![evaluacion_02.jpg](https://libros.catedu.es/uploads/images/gallery/2023-06/scaled-1680-/evaluacion-02.jpg)](https://libros.catedu.es/uploads/images/gallery/2023-06/evaluacion-02.jpg)

La parte de 'Utensilios' **no está correctamente desglosada (o descompuesta)**. Por lo tanto, si la solución, o el algoritmo, se creara a partir de esto, hornear el pastel tendría problemas. El algoritmo diría qué utensilio se necesita, pero no cómo usarlo, por lo que una persona podría terminar tratando de usar un cuchillo para medir la harina y una batidora para cortar un trozo de mantequilla, por ejemplo. Esto sería incorrecto y, por supuesto, no funcionaría.

Idealmente, entonces, 'Utensilios' debería descomponerse aún más, para indicar **qué utensilios se necesitan y con qué ingredientes.**

[![imagen.png](https://libros.catedu.es/uploads/images/gallery/2023-06/scaled-1680-/L3Rimagen.png)](https://libros.catedu.es/uploads/images/gallery/2023-06/L3Rimagen.png)

**El error se da aquí porque el problema de qué equipo usar y con qué ingredientes usarlo no se había descompuesto por completo.**

### **Soluciones incompletas**

Si se aplican técnicas de pensamiento computacional al problema de cómo hornear un pastel, al descomponer el problema, es necesario saber:

[![evaluacion tipos.jpg](https://libros.catedu.es/uploads/images/gallery/2023-06/scaled-1680-/evaluacion-tipos.jpg)](https://libros.catedu.es/uploads/images/gallery/2023-06/evaluacion-tipos.jpg)

Sin embargo, esto está incompleto: se ha **omitido** parte del problema. Todavía necesitamos saber:

- Dónde hornear el pastel
- A qué temperatura hornear el pastel.

Por lo tanto, si esta información se usara para crear la solución, el algoritmo diría cuánto tiempo se debe hornear el pastel, pero no indicaría que se debe colocar el pastel en el horno o la temperatura a la que debe estar el horno. Incluso si el pastel llegó al horno, podría terminar poco cocido o quemado hasta convertirse en cenizas.

Se han omitido factores muy importantes, por lo que las posibilidades de hacer un gran pastel son escasas.

**El error se dio aquí porque no se había incluido colocar el pastel en el horno y especificar la temperatura del horno, lo que hacía que la solución fuera incompleta.**

### **Soluciones ineficientes**

Si se aplican técnicas de pensamiento computacional al problema de cómo hornear un pastel, al descomponer el problema, la solución sería, entre otras cosas, que se necesitan **ciertas cantidades de ingredientes** particulares para hacer el pastel.

Para el primer ingrediente, podría decirnos que vayamos a la despensa, tomemos el ingrediente y lo traigamos de vuelta a la mesa. Para el segundo, y todos los demás ingredientes, podría decirnos que hagamos lo mismo.

Si el pastel tuviera tres ingredientes, eso significaría **tres viajes a la alacena**. Si bien el programa funcionaría así, sería innecesariamente largo y complicado:

[![imagen.png](https://libros.catedu.es/uploads/images/gallery/2023-06/scaled-1680-/922imagen.png)](https://libros.catedu.es/uploads/images/gallery/2023-06/922imagen.png)

Sería más eficiente obtener todos los ingredientes de una sola vez y, como resultado, el programa sería más corto:

[![imagen.png](https://libros.catedu.es/uploads/images/gallery/2023-06/scaled-1680-/H1cimagen.png)](https://libros.catedu.es/uploads/images/gallery/2023-06/H1cimagen.png)

La solución ahora es más **simple y eficiente**, y se ha reducido de nueve pasos a cinco.

El problema ocurrió aquí porque algunos pasos se repitieron innecesariamente, lo que hizo que la solución fuera ineficiente y demasiado larga.

### **Soluciones que no cumplen con los criterios de diseño originales**

Las soluciones deben evaluarse según la **especificación original** o los **criterios de diseño** cuando sea posible. Esto asegura que la solución no se haya desviado demasiado de lo que se requería originalmente, que solucione el problema original y que sea adecuado para los usuarios.

Imagina tener que aplicar el pensamiento computacional al problema de cómo hornear un pastel. Al descomponer el problema, es necesario saber:

[![evaluacion tipos.jpg](https://libros.catedu.es/uploads/images/gallery/2023-06/scaled-1680-/evaluacion-tipos.jpg)](https://libros.catedu.es/uploads/images/gallery/2023-06/evaluacion-tipos.jpg)

El primer punto considera qué tipo de pastel hornear. A menudo, cuando se idean soluciones a problemas, se da una especificación para el diseño. Por ejemplo, es posible que el pastel tenga que ser un pastel de chocolate, que sigue siendo bastante general, o un pastel de dulce de chocolate con glaseado de chocolate y almendras por encima, que es más específico.

Para cumplir con los criterios de diseño, es importante asegurarse de hornear **exactamente el tipo correcto de pastel**. De lo contrario, la solución puede no ser adecuada para su propósito.

**El error ocurrió aquí porque la solución no cumplía con los criterios de diseño originales, no era exactamente lo que se solicitaba.**

[![no cumple criterios iniciales.jpg](https://libros.catedu.es/uploads/images/gallery/2023-06/scaled-1680-/no-cumple-criterios-iniciales.jpg)](https://libros.catedu.es/uploads/images/gallery/2023-06/no-cumple-criterios-iniciales.jpg)

## **¿Cómo evaluamos nuestra solución?**

[![evaluar la solucion.jpg](https://libros.catedu.es/uploads/images/gallery/2023-06/scaled-1680-/evaluar-la-solucion.jpg)](https://libros.catedu.es/uploads/images/gallery/2023-06/evaluar-la-solucion.jpg)

Hay varias formas de evaluar las soluciones. Para estar seguro de que la solución es correcta, es importante **preguntar**:

### <span class="s1">¿Tiene sentido la solución?</span>

¿Entiendo ahora completamente cómo resolver el problema? Si todavía **no tengo claro** cómo hacer algo para solucionar nuestro problema, debo volver atrás y asegurarme de que todo se haya descompuesto correctamente. Una vez que sepa cómo hacer todo, nuestro problema se descompone completamente.

### <span class="s1">¿La solución cubre todas las partes del problema?</span>

Por ejemplo, si dibujo un gato, ¿la solución describe **todo lo necesario** para dibujar un gato, no solo los ojos, la cola y el pelaje? De lo contrario, debo regresar y seguir agregando pasos a la solución hasta que esté completa.

### <span class="s1">¿La solución pide que se repitan las tareas?</span>

Si es así, ¿hay alguna manera de reducir la repetición? He de regresar y **eliminar las repeticiones innecesarias** hasta que la solución sea eficiente.

Una vez que esté satisfecho/a con una solución, puedo pedirle a otra persona que la **revise**. Otro punto de vista suele ser bueno para detectar errores.

Es importante que tu solución siga los principios **KISS** y **DRY**.

<p class="callout info">Los principios **KISS** (Keep It Simple, Stupid) y **DRY** (Don't Repeat Yourself) son dos conceptos importantes en el desarrollo de software y en la generación de algoritmos en general. El principio **KISS** se refiere a mantener las cosas **simples en el diseño y desarrollo**. Sugiere que es mejor optar por soluciones **simples** y **directas** en lugar de complicar innecesariamente el proceso. Por otro lado, el principio **DRY** se enfoca en evitar la repetición de tareas (o código) y de información en un sistema. En lugar de duplicar las tareas o la lógica, se promueve la creación de **abstracciones.** Aplicado a programación promueve la **reutilización** de código a través de funciones, clases o módulos. Esto reduce la duplicación, mejora la legibilidad y facilita los cambios, ya que solo se requiere modificar una única fuente de información. Ambos principios buscan fomentar la **claridad y** la **eficiencia.** Para más información sobre estos principios podéis consultar [aquí](https://www.blogotec.com/principios-en-el-diseno-del-software-kiss-dry-y-solid/).  
</p>

### **Simulacro**

Una de las mejores formas de probar una solución es realizar lo que se conoce como "simulacro". **Con lápiz y papel, trabaja en el algoritmo y traza un camino a través de él**.

Por ejemplo, en el apartado de Algoritmos, se creó un algoritmo simple para preguntarle a alguien su nombre y edad, y hacer un comentario basado en estos. Puedes probar este algoritmo usando dos edades, 15 y 75 años. Al usar 75 años, ¿adónde va el algoritmo? ¿Da la salida correcta? Si usas la edad de 15 años, ¿te lleva por un camino diferente? ¿Sigue dando la salida correcta?

**Si el simulacro no da la respuesta correcta**, hay algo mal que debe corregirse. Revisar la ruta a través del algoritmo ayudará a mostrar dónde está el error.

Los simulacros también se utilizan con programas completos. Los programadores usan ensayos para ayudar a encontrar errores en el código de su programa.

<p class="callout success">**IDEA.** Puedes jugar a que se **intercambien sus soluciones para evaluarlas y detectar fallos**. Dependiendo de cuál haya sido la actividad propuesta, por ejemplo, si hemos hecho lo del pastel, pues se trataría de que otro grupo revisara la solución. Esto puede hacerse con papel y lápiz o pueden pequeñas representaciones teatrales de la solución: Voy a hacer como que hago un pastel con estas instrucciones. También puedes darles soluciones que tengan fallos y animarles a encontrarlos.</p>

# Caso práctico

Te proponemos aplicar el **pensamiento computacional** a un **problema real** al que podríamos tener que enfrentarnos. Resolveremos este reto paso a paso viendo que herramientas o alternativas podemos usar en cada uno de ellos.

Como ya hemos visto, el pensamiento computacional consta de 4 pilares básicos y cada uno de ellos es imprescindible. En el aula lo recomendable es proponer actividades para ejercitar cada uno de ellos. De esta manera puedes ver fácilmente si alguno de ellos necesita trabajo extra por parte de alumnado y reforzarlo con actividades específicas. Los cuatro pilares están interconectados por lo que es frecuente que usemos varios a la vez. Cuando decimos practicar uno, nos referimos al predominante, no quedando otros excluidos

**Reto: Prepara un día en la playa de Salou con un amigo.**

[![excursion zarautz.jpg](https://libros.catedu.es/uploads/images/gallery/2023-06/scaled-1680-/excursion-zarautz.jpg)](https://libros.catedu.es/uploads/images/gallery/2023-06/excursion-zarautz.jpg)

No me tengo que olvidar de la crema, ni de coger algo para beber, ni del bañador, ni de las gafas de sol, ni de ……

Veamos si somos capaces de poner orden en el problema para no dejarnos nada.

Siguiendo los pilares del pensamiento computacional debemos plantearnos:

**Descomposición:** ¿Podemos descomponer el problema en partes más simples?

**Abstracción:** ¿Podemos ver qué detalles son relevantes y cuales irrelevantes?

**Reconocimiento de patrones**: ¿Podemos recordar viajes similares o experiencias parecidas con esta amiga o amigo?

**Algoritmo**: ¿Podemos preparar un plan de acción?

## **Descomposición**

Intentemos descomponer el reto en retos más simples que podamos afrontar fácilmente:

**¿Cómo vamos a ir a Salou?**

**¿Hora de salida y de vuelta?**

**¿Qué comida y bebida vamos a llevar? ¿O mejor comprarla allí?**

**¿Qué ropa vamos a llevar?**

**¿Cómo nos protegeremos del sol?**

**¿Qué prevemos hacer en Salou?**

Intentemos resolver cada uno de estos problemas. Algunos los resolveré yo y otros mi amigo:

**¿Cómo vamos?**

Queremos aprovechar todo el día, con lo que iremos a primera hora y volveremos para llegar a casa a las 9 ó 10 de la noche. Si llevamos el coche, tendremos que pagar el parking y en Salou no es nada fácil aparcar. Miraremos si hay viajes en autobús y si quedan plazas.

Mi amigo ha ido varias veces en autobús a Salou, con lo que es más fácil que se encargue él de mirar autobús, horarios… ya que ya sabe con qué compañía hacerlo.

**¿Comidas?**

Tenemos que comer al mediodía, tomar algo a media mañana y algo para merendar. Cenaremos en casa.

A media mañana podemos tomar algo de fruta.

Para comer podemos llevar bocadillos y comprar la bebida allí, para que esté fresquita. Y a media tarde, podemos tomarnos un helado.

Yo me puedo encargar de comprar algo de fruta y de preparar los bocadillos. Hablaré con mi amigo para ver de qué le gusta el bocadillo.Tendré cuidado de no usar ingredientes que se puedan estropear con el calor.

No hay que olvidarse de coger algo de dinero.

La cena podemos hacerla en casa.

**¿Ropa?**

Pensemos en el calzado para la playa: ¿chancletas?

¿Bañador y bañador de repuesto?

¿Un pantalón corto y camiseta será suficiente?

¿Gorra para proteger la cabeza del sol?

Un jersey para el autobús, que a veces hace frío con el aire acondicionado.

**¿Y cómo nos protegemos del sol?**

Gafas de sol.

Crema solar de protección alta, que vamos a estar todo el día.

¿Sombrilla?

**¿Qué haremos?**

Por la mañana estaremos en la playa.

A media mañana podemos tomar la fruta.

Al mediodía nos tomamos los bocatas y el café en algún chiringuito.

A media tarde un helado.

Y a las 8 cogeremos el bus de vuelta.

Como vemos en este ejemplo la descomposición puede hacerse en varios niveles de detalle. Cada parte del problema puede a su vez subdividirse. En nuestro caso de qué es el bocadillo supone desglosar el punto referente a la comida. Cuanto mayor es el problema más necesario es aplicar la descomposición en cada parte.

## **Reconocimiento de patrones**

Al haber descompuesto el reto en problemas más pequeños, resulta más sencillo centrarse en cada uno de ellos y proponer distintas soluciones e incluso decidir quién de los dos amigos puede afrontarlo con más facilidad, por que ya lo ha hecho antes, ha tenido experiencias similares, tiene conocimientos sobre el tema en cuestión,…

En nuestro ejemplo podemos encontrar patrones en:

“Tendremos que pagar el parking, en Salou no es nada fácil aparcar” Hemos ido más veces, o tal vez nos han hablado de ello o incluso puede que lo extrapolemos teniendo en cuenta otras playas similares en época estival

“Mi amigo ha ido varias veces en autobús a Salou, con lo que es más fácil que se encargue él de mirar autobús, horarios… ya que ya sabe con qué compañía hacerlo.” En su momento esta personas buscaría que opciones de autobuses hay, es una parte del trabajo que ya está hecha y solo hace falta recuperar.

“Un jersey para el autobús, que a veces hace frío con el aire acondicionado”. Nuestras experiencias previas en autobuses nos indican que aunque haga 30º conviene llevar una chaqueta.

## **Abstracción**

Como podéis ver, nos hemos intentado centrar en los temas relevantes, obviando detalles que no lo son. No nos centramos en si la gorra para protegernos del sol debe ser de un tipo u otro, de una marca u otra o de un color u otro. Es importante que llevemos una crema de protección solar que evite que nos quememos la piel, pero no lo es tanto la marca de la misma.

## **Algoritmo**

Y por último, deberíamos preparar un plan de acción. Como hemos visto el algoritmo se puede representar como pseudo-código o como diagrama de flujo

**Primero** deberemos comprobar que hay billetes de autobús y que el horario nos parezca correcto: salir hacia las 9 y volver hacia las 8. No tiene sentido afrontar el resto de los retos si no hemos resuelto este tema.

**Segundo**, haremos un check list con todo lo que debemos llevar, diferenciando lo que es para uso individual, como las gafas de sol, de lo que cogeremos para usar los dos, como lo es la crema de protección solar, que ya tengo un bote en casa

En este check list indicaremos quién se encarga de cada una de las tareas.

De manera esquemática podría escribirse como:

- Comprar billetes
- Preparar bolsa:
- Bañador
- Gafas de sol
- Gorra
- Dinero
- Fruta: yo
- Bocadillo: yo
- Crema de sol: Mi amiga
- Sombrilla: Mi amiga

Al hacer el check list nos hemos dado cuenta de que se nos olvidaba la toalla.

Diagrama de flujo:

[![Salou.jpg](https://libros.catedu.es/uploads/images/gallery/2023-06/scaled-1680-/salou.jpg)](https://libros.catedu.es/uploads/images/gallery/2023-06/salou.jpg)

## **Evaluación**

Se debe entender fácilmente, en caso contrario es posible que no está suficientemente descompuesto. En nuestro caso, si no especificamos qué debemos llevar a la playa tal vez nos olvidemos cosas, como por ejemplo la toalla.

Debe resolver todos los aspectos del problema: En nuestro caso hay un punto que está sin resolver…. ¿Paras un minuto y piensas cual puede ser?

Debe ser eficiente. No tiene ningún sentido que cojamos dos sombrillas o que nos encarguemos los dos en llamar a la compañía de autobuses para ver horarios y plazas disponibles,….

Debe cumplir con los criterios iniciales. En nuestro caso, si ante el hecho de no haber billetes optamos por buscar otra playa a la que ir en el día que hemos seleccionado estaríamos incumpliendo los criterios iniciales que eran ir a Salou.

Es interesante poder hacer un simulacro. Puede hacerse en lápiz y papel repasando punto por punto o algo más teatralizado. Es interesante que participe en la evaluación alguien que no ha estado en el proceso.

Y ahora…¿Has encontrado ya el fallo de nuestra solución?

¡¡Efectivamente!! No hemos consultado la previsión del tiempo. Aunque pensemos que el tiempo está asegurado, puede no ser así.

# Pensamiento computacional en el aula

En el aula es común que encontremos problemas de este tipo:

**“Un trastero tiene una forma cuadrada de 5 metros de lado y 2m de alto . ¿Cuál es el área del suelo del trastero?"**

Las tres fases para resolver estos problemas son:

- Correspondencia
- Identificación de reglas
- Aplicación de reglas

En la **primera fase** necesitamos encontrar los **datos necesarios** para la resolución del problema. Para ello es muy importante que sepamos **qué nos pide el problema**. Los datos relevantes no son los mismos si nos preguntan el área del suelo o cuánto aire cabe dentro trastero. Para completar la primera fase necesitamos saber que hablamos de un cuadrado de 5m de lado y que nuestra **incógnita** es el área.

A continuación tenemos que **identificar la regla** que relaciona los datos conocidos con los desconocidos. En nuestro caso el lado de un cuadrado con su área. La regla sería *área = lado x lado.*

Por último **aplicamos la regla**, sustituimos los datos conocidos y hallamos lo desconocido: 5 x 5= 25 m.

Este tipo de problemas son los que nos encontramos **más habitualmente** en el aula, tienen como resultado un número y además comparten otras características como:

- Son **deterministas** en su **solución**: La solución es única
- Son **deterministas** en el **proceso** de solución: Hay un proceso conocido hasta llegar a la solución

Nuestro alumnado frecuentemente está adiestrado para resolver este tipo de problemas, de hecho, si doy en el enunciado **más datos de los necesarios** para resolver un problema les generaré dudas. Incluso puede pasar que apliquen reglas que no corresponden al problema **con tal de usar todos lo datos**. A pesar de que estos planteamientos son los más comunes en el entorno escolar **no lo son en nuestro día a día**.

Los problemas de la **vida real,** en general, **no son deterministas** ni en la solución ( hay varias posibles) ni en el proceso de llegar a ellas.

Veamos dos problemas que podrían pasar en un cole:

**Problema 1**: “Cuando llueve, los pasillos del cole se mojan y el suelo resbala”

[![resbalon.jpg](https://libros.catedu.es/uploads/images/gallery/2023-06/scaled-1680-/resbalon.jpg)](https://libros.catedu.es/uploads/images/gallery/2023-06/resbalon.jpg)

Las soluciones para este problema pueden ser:

- Construir una zona cubierta a la entrada del cole y en la transición entre las aulas y el patio
- Colocar felpudos
- Usar otras zapatillas dentro del cole
- <span class="s2">…</span>

Estos son **tres** enfoques posibles y cada uno requeriría su nivel de desarrollo:

- ¿Qué dimensiones tiene que tener la zona cubierta?
- ¿Cuántos y de qué dimensiones tienen que ser los felpudos para ser efectivos? ¿Dónde tendrían que ir colocados?
- ¿Dónde realizar el cambio de zapatos? ¿ Qué estructuras o armarios habría que usar, pensando en tener espacio para el calzado de todo el alumnado?
- ¿Cuál es el costo aproximado para cada una de las soluciones propuestas?
- ¿Qué otros beneficios, además de evitar los resbalones, tiene cada solución?
- ¿Cuáles son los inconvenientes?

**Problema 2:** “Muchas veces no se oye bien en clase”

[![ruido.jpg](https://libros.catedu.es/uploads/images/gallery/2023-06/scaled-1680-/ruido.jpg)](https://libros.catedu.es/uploads/images/gallery/2023-06/ruido.jpg)

- Incluir material de aislamiento acústico en paredes y techos
- Reducir el número de alumnado por clase
- Crear espacios “ruidosos” y “ silenciosos” dentro de la escuela
- Mejorar los sistema de audio del centro
- Poner protectores a las patas de sillas y mesas
- <span class="s2">…</span>

Al igual que en el caso anterior y cada enfoque requeriría su nivel de desarrollo e investigación:

- ¿Qué material de aislamiento usar? ¿Cuánto? ¿Qué hacer con las cristaleras?
- ¿Qué salas tiene el centro? ¿Todas están siempre en uso?
- ¿Hay recursos humanos suficientes? ¿Cómo podrían optimizarse?
- ¿Qué equipos de audio existen en las aulas? ¿Funcionan con la calidad adecuada? ¿Podrían mejorarse?
- ¿Cuántas mesas y sillas hay en el cole? ¿Qué tipo de protectores necesitan? ¿Habría que renovar mobiliario?
- ¿Cómo afectan otros factores, como por ejemplo la ventilación del aula cuando hace calor, a la acústica?
- ¿Cuál es el costo aproximado para cada una de las soluciones propuestas?
- ¿Qué otros beneficios, además de reducir el ruido tiene cada solución?
- ¿Cuáles son los inconvenientes?...

En ambos casos hay muchas respuestas y **la mayoría no son conocidas a priori**.

Son este **tipo de problemas** los que requerirán para su resolución más **habilidades** relacionadas con el **pensamiento computacional**. Su resolución, además, requiere de un **nuevo lenguaje**. La respuesta no va a ser un número. La respuesta tiene mucho que ver con el mismo proceso y su expresión nos debe permitir crear, simular, explorar, comprobar y experimentar.

En **resumen**, cuando hablamos de pensamiento computacional en el aula recuerda:

- <p class="callout success">**No tiene por qué tener nada de tecnológico.** A lo largo del módulo hemos visto diversas actividades, adecuadas para diversas edades, que no necesitan de este tipo de soportes.</p>
- <p class="callout success">**Trabaja en grupo**: Una de las riquezas de las actividades de pensamiento computacional es la discusión, la confrontación de ideas, ponerse de acuerdo…. Y, además, también es una parte divertida</p>
- <p class="callout success">El **resultado** es importante, pero no más que el **proceso**</p>

Para que las habilidades asociadas al pensamiento computacional se desarrollen debemos generar **situaciones adecuadas de aprendizaje**. Como todo en la vida, requieren de entrenamiento y práctica. Se adquieren de forma progresiva hasta alcanzar un grado en el que se convierten en operativas.<span class="Apple-converted-space"> </span>Del entrenamiento de estas destrezas nos encargaremos en el módulo 2.