El mundo donde vivimos se ha convertido en un mundo digital, lleno de tecnología e impulsado por la informática. El software y la tecnología han transformado todas las materias y áreas de trabajo, desde la ciencia y la medicina, hasta la historia del arte y la psicología. La tecnología digital es omnipresente. Para ser ciudadanos informados y empoderados, la próxima generación de estudiantes debe comprender este mundo digital en el que viven.
This is why Computational Thinking has been called the '21st Century Skill Set', and is important for everyone to learn. It is critical to understanding how the digital world works, for harnessing the power of computers to solve tough problems, and making great things happen! It also enables us to think critically about not just the benefits of certain technologies, but also the potential harm, ethical implications, or unintended consequences of these.
But what exactly is Computational Thinking? Let's have a look at a technical definition...
"El pensamiento computacional lo conforman los procesos de pensamiento involucrados en la formulación de problemas y sus soluciones para que las soluciones se representen de una forma que pueda ser llevada a cabo de manera eficaz por un agente de procesamiento de información."
Phew, it's quite a mouthful isn't it? But, as we like to say at CS Unplugged, it's just big words for simple ideas! 'Information-processing agent' means anything that follows a set of instructions to complete a task (we call this 'computing'). Most of the time this 'agent' means a computer or other type of digital device - but it could also be a human! We'll refer to it as a computer to make things a bit simpler. To represent solutions in a way that a computer can carry them out, we have to represent them as a step by step process - an algorithm. To create these algorithmic solutions we apply some special problem solving skills to. These skill are what make up Computational Thinking! And they are skills that are transferrable to any field.
Computational Thinking could be described as 'thinking like a Computer Scientist', but it is now an important skill for everyone to learn, whether they want to be a Computer Scientist or not! It's interesting, and important, to note that Computational Thinking, and Computer Science, aren't entirely about computers, they are more about people. You might think that we write programs for computers, but really we write programs for people - to help them communicate, find information, and solve problems.
Por ejemplo, puedes usar una aplicación en un smartphone para ver cómo llegar a la casa de un amigo; la aplicación es un ejemplo de un programa de ordenador y el smartphone es el "agente de procesamiento de información" que ejecuta el programa para nosotros. Quienes diseñaron el algoritmo para encontrar la mejor ruta y todos los detalles como la interfaz y cómo almacenar el mapa, aplicaron el pensamiento computacional para diseñar el sistema. Pero no lo diseñaron por el bien del smartphone; lo diseñaron para ayudar a la persona que lo usa.
Pensamiento computacional en CS Unplugged
A lo largo de las lecciones y las unidades en CS Unplugged hay muchos enlaces al pensamiento computacional. La enseñanza del pensamiento computacional a través de las actividades de CS Unplugged le enseña a los alumnos cómo:
describir un problema,
identificar los detalles importantes necesarios para resolver este problema,
descomponer el problema en pequeños y lógicos pasos,
utilizar estos pasos para crear un proceso (algoritmo) que resuelva el problema,
y luego evaluar este proceso.
Estas habilidades son transferibles a cualquier otra área curricular, pero son particularmente relevantes para desarrollar sistemas digitales y para resolver problemas utilizando la capacidad de los ordenadores.
Estos conceptos del pensamiento computacional están todos conectados entre sí y se apoyan mutuamente, pero es importante tener en cuenta que no necesariamente todos los aspectos del pensamiento computacional ocurrirán en cada unidad o lección. En cada unidad y lección, hemos resaltado las conexiones importantes para que puedas observar a tus alumnos en acción.
Hay una serie de definiciones de pensamiento computacional, pero la mayoría tiene un conjunto de 5 o 6 habilidades de resolución de problemas que representan el pensamiento computacional. Para el proyecto Unplugged, hemos identificado las siguientes seis habilidades de PC que a menudo se mencionan en la bibliografía; se describen a continuación y al final de cada lección de Unplugged, hemos identificado las formas en que se manifestaron estas habilidades en la lección, para ayudarte a ver la conexión del PC con las lecciones.
Habilidades del pensamiento computacional
Pensamiento algorítmico
Algorithms are at the heart of Computational Thinking and Computer Science, because in Computer Science the solutions to problems are not simply an answer (e.g. '42', or a fact), they are algorithms. An algorithm is a step-by-step process that solves a problem or completes a task. If you follow the algorithm's steps correctly, you will arrive at a correct solution, even for different inputs. For example, we can use an algorithm to find the shortest route between two locations on a map; the same algorithm can be used for any pair of starting and finishing points, so the solution depends on the input to the algorithm. If we know the algorithm for solving a problem then we can solve that problem easily, whenever we want, without having to think! We can just follow the steps. Computers can't think for themselves, so they need to be given algorithms to do things.
El pensamiento algorítmico es el proceso de creación de algoritmos. Cuando creamos un algoritmo para resolver un problema, lo llamamos una solución algorítmica.
Los algoritmos computacionales (del tipo que se puede ejecutar en dispositivos digitales) tienen relativamente pocos ingredientes porque los dispositivos digitales solo tienen unos pocos tipos de instrucciones que pueden seguir; las principales cosas que pueden hacer son recibir entrada, proporcionar salida, almacenar valores, seguir instrucciones en una secuencia, elegir entre opciones y repetir instrucciones en un bucle. A pesar de lo limitada que es esta gama de instrucciones, hemos descrito todo lo que los dispositivos digitales pueden computar y esta es la razón por la que los algoritmos están restringidos a estos elementos.
Abstracción
Abstraction is all about simplifying things to help us manage complexity. It requires identifying what the most important aspects of a problem are and hiding the other specific details that we don't need to focus on. The important aspects can be used to create a model, or simplified representation, of the original thing we were dealing with. We can then work with this model to solve the problem, rather than having to deal with all the nitty gritty details at once. Computer Scientists often work with multiple levels of abstraction.
Usamos la abstracción a menudo en nuestra vida cotidiana, por ejemplo, cuando usamos mapas. Los mapas nos muestran una versión simplificada del mundo al omitir detalles innecesarios, como dónde se encuentra cada árbol en un parque y solo conservan la información más relevante que el lector del mapa necesitará, como carreteras y nombres de calles.
Los dispositivos digitales usan la abstracción todo el tiempo; intentan ocultar tanta información innecesaria como sea posible. Por ejemplo, supongamos que hiciste una bonita foto panorámica en tu última acampada y ahora deseas editarla en el portátil y ajustar los colores. Normalmente podríamos hacer esto abriendo un programa de edición de imágenes, ajustando algunos controles deslizantes de color o tal vez eligiendo un filtro. Cuando haces esto suceden muchas operaciones complicadas que el ordenador te oculta.
The picture you took is stored on the computer as a big list of pixels, which are each a different colour, and each colour is represented by a set of numbers, and each of these numbers are stored as binary digits! That's a lot of information. Imagine if when you adjusted the colours you had to go through and look at all the colour values of every pixel and change each and every one of those! That's what the computer is doing for you, but since you don't need to know this to accomplish your goal the computer hides this information away.
Descomposición
La descomposición consiste en descomponer los problemas en partes más pequeñas y manejables, para luego enfocarse en resolver cada uno de estos problemas más pequeños. Podemos descomponer un problema complejo hasta que las partes más pequeñas sean tan simples que sean fáciles de resolver. Las soluciones para cada uno de estos problemas más pequeños y simples se convierten en una solución al gran problema con el que comenzamos. ¡La descomposición ayuda a que los problemas grandes sean mucho menos intimidantes!
La descomposición es una habilidad importante para crear algoritmos y procesos que se puedan implementar en un dispositivo informático, porque los ordenadores necesitan instrucciones muy específicas. Necesitan que les digan cada uno de los pequeños pasos que deben seguir para hacer las cosas.
Por ejemplo, la tarea general de hacer una tarta se puede descomponer en varias tareas más pequeñas, cada una de las cuales se puede realizar fácilmente.
Hacer tarta
Hornear tarta
Poner los ingredientes en un cuenco (mantequilla, azúcar, huevo, harina)
Mezclar
Verter en el molde
Meter al horno durante 30 min.
Sacarla del molde
Hacer el glaseado
Poner sobre la tarta
Generalización y patrones
La generalización también se conoce como "reconocimiento y generalización de patrones". La generalización consiste en tomar una solución (o parte de una solución) a un problema y generalizarla para que se pueda aplicar a otros problemas y tareas similares. Dado que las soluciones en informática son algoritmos, esto significa que debemos tomar un algoritmo y hacerlo lo suficientemente general de manera que se pueda usar para una variedad de problemas. Este proceso implica la abstracción, ya que para hacer algo más general, tenemos que eliminar detalles innecesarios que están relacionados con un problema o una situación específica, pero no son importantes para el funcionamiento del algoritmo.
Spotting patterns is an important part of this process, when we think about problems we might recognise similarities between them and that they can be solved in similar ways. This is called pattern matching, and it's something we do naturally all the time in our daily life.
Los algoritmos generalizados se pueden reutilizar para un grupo completo de problemas similares, lo que significa que podemos encontrar soluciones de manera rápida y eficaz.
Evaluación
La evaluación consiste en identificar las posibles soluciones a un problema y juzgar cuál nos conviene usar, si funcionarán en algunas situaciones pero no en otras y cómo se pueden mejorar. Al juzgar nuestras soluciones, debemos pensar en una variedad de factores. Por ejemplo, cuánto tiempo tardarán estos procesos (algoritmos) en resolver el problema y si lo resolverá de forma fiable o si hay ciertas situaciones en las que funcionará de una manera muy diferente. La evaluación es algo que practicamos constantemente en nuestra vida cotidiana.
There are different ways we can evaluate our algorithmic solutions. We can test their speed by implementing them on a computer; or we can analyse them by counting or calculating how many steps they are likely to take. We can test that our algorithmic solutions work correctly by giving them lots of different inputs, and checking they work as expected. When we do this we need to think about the different inputs we test, because we don't want to check every possible input (often there's an infinite number of possible inputs!), but we still need to know if our algorithmic solutions will work for all inputs. Testing is something Computer Scientists and programmers do all the time. But because we can't usually test every possible input, we also try to evaluate a system using logical reasoning.
Lógica
Al tratar de resolver problemas, debemos pensar de forma lógica. El razonamiento lógico consiste en tratar de darle sentido a las cosas observando, recopilando datos, pensando en los hechos conocidos y luego resolviendo las cosas en función de lo que ya se sabe. Nos ayuda a usar nuestro conocimiento existente para establecer reglas y verificar hechos.
Por ejemplo, supongamos que estás desarrollando un programa que calcula la ruta más corta a una ubicación desde tu casa. En el siguiente mapa, la biblioteca se encuentra a 2 minutos si vas hacia el norte desde tu casa, pero si vas hacia el sur, el siguiente cruce se encuentra a 3 minutos. Quizás te preguntes si hay una ruta mejor hacia la biblioteca si comienzas dirigiéndote hacia el sur, pero lógicamente no puede existir porque ya habrías caminado durante 3 minutos para llegar al cruce.
A un nivel más profundo, los ordenadores están construidos completamente sobre la lógica. Usan los valores "Verdadero" y "Falso" y usan una cosa llamada "expresiones booleanas", como "edad > 5", para tomar decisiones en los programas de ordenador.
Rastrear un error en un programa también requiere pensamiento lógico, para determinar dónde y por qué está fallando algo en el programa.
¡Lamentablemente esta definición no está disponible en español!