Computacion informatica apuntes
El pensamiento computacional
Glosario de términos clave
- Variables y asignación
- Selección
- Bucles/Iteración
- Subrutinas, procedimientos, funciones, métodos
- Recursividad
- Heurística
- Modelado computacional
- Estrategias recursivas
- Divide y vencerás
Resumen
Estas son las areas que debemos estudiar y comprender para ser alguien con gran domino en las informaticas y ciencias de la computacion y poder aplicar los principios del pensamiento computacional en las ciencias de la computacion.
- Sistemas de computacion
- Redes e internet
- Datos y analisis
- Algoritmo y programacion
- Impactos de la computacion
La computación es la ciencia que estudia los sistemas computacionales, incluyendo el hardware, software y los fundamentos teóricos del procesamiento de la información. En este sentido, el pensamiento computacional es un proceso por el cual un individuo utiliza principios lógicos del procesamiento de la información, como lo son la representación de procesos, diseño de procesos, iteración y otros elementos afines para abordar un problema complejo, entenderlo y diseñar una solución algorítmica.
Es un proceso que involucra el descomponer problemas complejos en problemas más sencillos y manejables para posteriormente construir una solución algorítmica mediante principios operativos que veremos y detectaremos mediante la abstracción y el reconocimiento de patrones. En simples palabras el pensamiento computacional es analizar un problema de tal forma que un ordenador (mayormente, pero no únicamente) pueda resolver el problema, para posteriormente utilizar nuestro conocimiento técnico para conseguir que sea el ordenador el que trabaje en ese problema por sí mismo.
Objetivos del pensamiento computacional
El pensamiento computacional tiene como objetivo ser un sistema eficiente de resolución de problemas mediante los principios de la manipulación de la información y la computación en general. Para ello se busca lo siguiente:
- Formular preguntas o planteamientos que puedan ser resueltos o abordados mediante principios computacionales o un ser humano aplicando el pensamiento algorítmico.
- Organizar y analizar la información de forma lógica
- Representar la información mediante abstracciones como modelos y simulaciones.
- Automatización de soluciones a través del pensamiento algorítmico
Principios del Pensamiento computacional
El pensamiento computacional cuenta con 6 principios, de los cuales 2 son transversales, y 4 pilares, los transversales significan que como su palabra misma lo describe, son transversales a todo el proceso (el cual puede ser iterativo), y los pilares son los conceptos caracteristicos que distinguen el pensamiento computacional de otros enfoques de pensamiento y resolución de problemas. Los 6 principios son:
- Lógica
- Algoritmos
- Descomposición
- Patrones
- Abstracción
- Evaluación
Principios transversales
En primer lugar abordemos los principios transversales, la lógica y la evaluación. Empecemos por la lógica:
- La lógica: es la disciplina que se encarga de los principios de la inferencia valida y demostración, pero además se enfoca en la estructura del pensamiento y del lenguaje, analizando la coherencia y valides del mismo, con el objetivo de establecer las reglas que permitan distinguir los razonamientos correctos de lo incorrecto, en simples palabras es como un manual de instrucciones para pensar bien y asegurarte que tus razonamientos e ideas tengan sentido y funcionen. En el ámbito de la ciencias de la computación, la lógica se encarga de estructurar la forma en la que abordaremos el problema y crearemos la solución y como utilizaremos correctamente los principios pilares de la computación.
- La evaluación: aunque aparentemente obvia, la evaluación es igual de importante ya que la evaluación es la implementación de la lógica como control de calidad para asegurarnos que nuestro enfoque es correcto, pero también para poder detectar formas de aplicar ese enfoque de manera mas eficiente o detectar enfoques mejores, la evaluación permite observar la solución y descubrir alternativas eficaces, ya que regularmente un problema tiene varias soluciones.
Principios pilares
Los principios pilares como se menciono anteriormente, son los principios característicos únicos del pensamiento computacional. Estos son:
- Descomposición: La descomposición consiste en dividir un problema grande en partes mas pequeñas y fáciles de manejar, lo que permite abordar un problema grande al convertirlo en un conjunto de problemas pequeños, los cuales a su vez se pueden de ser necesario dividir en problemas aun mas pequeños, algo así como una receta de cocina, o el enfoque de la EDT de gestión de proyectos. Esto también puede evidenciarse en virtud de la teoría de sistemas, en donde las micro soluciones permiten crear un sistema complejo que actué como una macro solución.
- Abstracción: La abstracción consiste en identificar la información que es relevante, eliminando los detalles innecesarios con el objetivo crear una representación simplificada de algo para que este sea mas comprensible y fácil de manejar, dicho proceso se logra mediante reducir un conjunto de elementos e informaciones, seleccionando únicamente las características mas importantes, lo que permite establecer niveles de complejidad mas reducidos al dejar de lado detalles complejos.
- Reconocimiento de patrones: El reconocimiento de patrones o generalización, consiste en detectar similitudes, estructuras o regularidades (patrones) que se repiten dentro de un problema y aprovecharlas o hacer generalizaciones a otros problemas, lo que nos permite simplificar soluciones o extenderlas (extrapolarlas) a otros elementos que aunque diferentes compartan similitudes clave. Básicamente es identificar similitudes y regularidades, las cuales se pueden utilizar para hacer predicciones, y/o formular reglas o principios aplicables a una categoría mas amplia (otros elementos similares).
- Algoritmos: un algoritmo es un diseño o conjunto de pasos ordenados y claros para resolver un problema. Para ello se usa el pensamiento algorítmico, que es la capacidad de pensar en términos algorítmicos, esto es, la capacidad de pensar en secuencias y reglas para resolver problemas. Este proceso se compone de 2 etapas, la resolución del problema, donde se analiza el problema a profundidad y se diseña una solución algorítmica, a través de los principios del pensamiento computacional y la implementación de la solución, en la cual mediante conocimientos técnicos se implementa la solución algorítmica para que un sistema informático (o un ser humano) la pueda ejecutar.
Nota: Un sistema eso un objeto complejo, compuesto por varios elementos o partes funcionales entre si que guardan relacion con si misma, entre ellas, con el mismo sistema y/o otro sistema, estas partes trabajaran juntas, de forma coordinada orientadas a un fin.
Como se implementa el pensamiento computacional
Para abordar un problema y crear una solución utilizando el pensamiento computacional se sigue un enfoque estructurado e iterativo, estructurado porque presenta un orden y coherencia e iterativo, porque el proceso se puede repetir varias veces tanto para la solución completa como para cada una de sus partes particulares que la componen.
Pautas para abordar un problema y crear una solución
En primer lugar antes de abordar un problema y también mientras se aborda un problema se debe seguir una serie de reglas para poder lograr el propósito de manera eficiente y efectiva. Las pautas son las siguientes:
- Lectura y análisis del problema: Lo primero que se debe hacer es tener claro la premisa del problema, ya sea el objetivo a lograr, un problema a resolver, etc. Para ello conviene estar al tanto de lo que se busca teniendo de manera detallada y completa el problema en cuestión.
- Lluvia de ideas para posibles soluciones: Una vez claro el problema se procede a una lluvia de ideas de posibles soluciones, esto es así porque un problema suele tener varias soluciones, por tanto tener varias propuestas es esencial, no solo para dar con la solución, sino también para dar con la mas eficiente según la necesidades, capacidades y elementos adicionales que se necesiten tomar en cuenta.
- Revisión de los conocimientos actuales: Debemos tener claro los conocimientos tanto técnicos, conceptuales y operativos que tenemos actualmente para lidiar con el problema y encontrar la solución. Es esencial que conozcamos nuestras capacidades y herramientas que tenemos, por ejemplo seria conveniente hacer una lista de aquello que se conoce que se podría aplicar para la solución. Esto también implica considerar los recursos necesarios.
- Revisión de conocimientos necesarios no adquiridos: También es necesario ser consiente de los conocimientos que se necesitan pero que no poseemos, esto se puede hacer desde haciéndose simples preguntas para comprender el mejor el problema, hasta buscar los conocimientos técnicos que se necesitan para abordar la solución informática.
- Plan de acción: Es necesario trazar un plan de acción, empezando con un listado preliminar de las acciones que se deben cumplir para afrontar la situación, además elementos como la EDT pueden servir.
- Análisis del problema: consiste en analizar con precisión el problema y decidir en que aspectos se van a centrar, aquí es conveniente empezar a aplicar el pensamiento computacional, como la gestion de proyectos.
- Búsqueda de información: Esta es una de las tareas que mas presente estará en todo el proceso, consiste en investigar para adquirir y profundizar conocimientos necesarios, explorar alternativas, y todo lo que implique investigacion profunda.
- Presentacion de resultados: es donde se elaboran los resultados, se presentan las soluciones y se comparte y/o compara con otras soluciones.
Nota: es posible que algunos pasos o todos los pasos se repitan varias veces en ciclos de iteracion, en estos casos recomendable ver los proyectos agiles
Pensamiento algorítmico
Una vez completadas las pautas expuestas anteriormente, es momento de abordar la solución, para ello hacemos uso del pensamiento algorítmico, el cual nos permitirá crear la solución tomando en cuenta siempre los principios del pensamiento computacional. A la hora de diseñar un algoritmo (sobre todo en la programación) generalmente se busca satisfacer los siguientes objetivos:
- Formular instrucciones para lograr el efecto deseado
- Formular instrucciones a seguir en un orden y secuencia determinado
- Formular instrucciones que utilicen operaciones aritméticas y lógicas
- Escribir secuencias de instrucciones que almacenen, muevan y manipulen datos (variables y asignación)
- Escribir instrucciones que elijan entre diferentes instrucciones (selección)
- Escribir instrucciones que repitan grupos de instrucciones (bucles/iteración/recursividad)
- Agrupar y nombrar una colecciona de instrucciones que realizan una tarea bien definida para crear una nueva instrucción (subrutinas, procedimientos, métodos, funciones)
- Escribir instrucciones que involucran subrutinas que usan copias de sí mismas (recursividad).
- Escribir conjuntos de instrucciones que puedan ser seguidas al mismo tiempo
por diferentes agentes (computadoras / personas, pensamiento y procesamiento paralelo, concurrencia). - Escribir un conjunto de reglas declarativas (ej.: codificación en Prolog o un lenguaje de consulta de base de datos).
- Usar una notación adecuada para escribir código que represente cualquiera de los anteriores.
- Creación de algoritmos para probar una hipótesis.
- Creación de algoritmos que brinden soluciones basadas en la experiencia (heurística).
- Crear descripciones algorítmicas de procesos del mundo real para
comprenderlos mejor (modelado computacional). - Diseñar soluciones algorítmicas que tengan en cuenta las habilidades, limitaciones y deseos de las personas que las utilizarán.
Características de los algoritmos
Los algoritmos poseen las siguientes características:
- Finitos. Disponen de un número determinado de pasos acabando en algún momento.
- Ordenados. Presentan una secuencia concreta y ordenada para llegar a la solución.
- Eficientes. Utilizan los mínimos recursos de computación: memoria y tiempo.
- Precisos. Se expresan en términos objetivos y sin ambigüedad.
- Concretos. Ofrecen una solución concreta al problema planteado.
- Deterministas. Producen siempre el mismo “output” al recibir el mismo “input”.
- Modificables. Se pueden editar y cambiar en cualquier momento.
- Modulares. Se estructuran en pasos y módulos.
Es importante que con la evaluación de soluciones algorítmicas se determine que se cumplen con estas características como un control de calidad
Conceptos clave que se manejan en el pensamiento algorítmico (y por ende en la programación)
Existen unos conceptos clave que se manejan en el pensamiento algorítmico, aunque estas particularidades son más propias de la programación informática, que está presente en tecnologías como lenguajes de programación, no significa que no se puedan aplicar a soluciones o enfoques analógicos o no pensados para ordenadores. Entre las múltiples particularidades las más importantes son:
- Secuencias: es una forma de expresar una actividad o tarea mediante una serie ordenada de pasos individuales, como una receta
- Bucles: son estructuras que permiten ejecutar de forma repetida una misma secuencia de instrucción, estos pueden ejecutarse indefinidamente o “n” cantidad de veces según se quiera y/o requiera, exige el reconocimiento de patrón que se repite para definirlo, por ejemplo para dibujar un hexágono podemos usar un bucle que repita 6 veces las instrucciones avanzar 6 unidades y girar 60 grados a la derecha
- Eventos: son acciones que ocurren, que el programa es capaz de detectar y que permiten disparar secuencias de código como respuesta (reacción) a ello, los eventos son los componentes esenciales de los objetos programados interactivos, básicamente son como los estímulos de un programa.
- Paralelismo: es la ejecución simultánea de 2 o más secuencias de instrucciones, las secuencias se producen al mismo tiempo, es decir en paralelo
- Condicionales: en la programación los condicionales son estructuras que permiten la capacidad de tomar decisiones en función de ciertos valores, estados o situaciones.
- Operadores: Los operadores permiten realizar operaciones aritméticas entre variables numéricas (sumar. restar, multiplicar, dividir …), operación en cadenas de texto (longitud, extracción de caracteres unión de cadenas …), operaciones lógicas (Y/O/No) en valores booleanos (verdadero/falso) … También permiten crear condiciones (igual, menor que, mayor que …) para las estructuras condicionales.
- Datos: Los datos implican almacenar, recuperar y actualizar valores
- Variables: una variable es una abstracción del almacenamiento de datos. Una forma de ilustrarlo es que una variable es una caja que contiene un objeto (valor) y una etiqueta por fuera (nombre), el valor guardado en la caja se puede modificar. La gestión de variables (su manejo) consta de 4 procesos habituales. Estos son:
- Declaración: Es la creación de la variable y su ámbito de uso (global o local)
- Inicialización: Es la asignación de un valor inicial a la variable al comienzo de la programación
- Modificación: se cambia su valor mediante una nueva asignación de valor, o incremento/decremento numérico.
- Eliminación: Se elimina la variable para liberar espacio de memoria
- Estructura de selección: Es una estructura de control de flujo mediante la cual un ordenador o persona ejecuta una secuencia de instrucciones que se cumplirá según una condición particular, al integrar una selección en una secuencia de instrucciones, este ejecutara rutinas (procesos o pasos) distintos según su condición, además, estas se pueden anidar unas dentro de otras para tener condicionales más complejos.
Nota: a pesar de que su foco principal es la programación, estos conceptos se pueden perfectamente usar en soluciones algorítmicas fuera de la programación
Elementos transversales en el pensamiento algoritmico
Existen elementos transversales adicionales a los conceptos clave que se aplican particularmente en el pensamiento algoritmico, estos elementos son transversales porque participan en todos los elementos y conceptos mencionados anteriormente, ademas de ser los elementos integradores de dichos conceptos, lo que permite que se integren entre si.
-
Abstraccion: es el resultado de reducir un proceso o conjunto de informaciones, seleccionando las caracteristicas mas importantes. Esto permite establecer interacciones niveles de complejidad mas reducidos, dejando de lado los detalles mas complejos, se pueden crear abstracciones para generalizar un rango de situaciones mediante la seleccion de propiedades comunes
-
Relaciones de sistemas: Las partes de un sistema son interdependientes y estan organizadas para un proposito comun. La perspectiva de sistemas permite aplicar los principios computacionales de manera mas sencilla y efectiva, tomando encuenta los principios generales de un sistema (modularidad, retroalimentacion eficiencia, sintesis, energia y jerarquia)
-
Interaccion humano-maquina: para una interaccion efectiva, los seres humanos y las computadoras deben contar con mecanismos e interfases que faciliten la comu
-
Privacidad y seguridad: la privacidad es la capacidad de ocultar informacion personal y expresarla de forma selectiva, esto incluye controles para el almacenamiento, acceso, uso, intercambio, actualizacion de informacion. La seguridad se refiere a las medidas de seguridad que rodean los sistemas de informacion, incluyendo proteccion contra robo o daño de hardware o software
-
Comunicacion y coordinacion: los procesos de computacion se caracterizan por el intercambio fiable de datos entre sistemas autonomos que cooperan hacia resultados que ningun agente podria hacer de forma aislada
Tipos de algoritmos relevantes
Conviene saber los tipos de algoritmos relevantes en el ocntexto particular de la programacion y la computacion en general, aunque existen una infinidad de algoritmos y criterios para clasificarlos, estos seran asi en funcion de que utilicen calculos matematicos o bien deciciones logicas. Asi mismo se diferencian entre computacionales o no computacionales, segun si necesitan o no un computador. Entre los algoritmos computacionales podemos destacar algunos comunes como:
- Algoritmos de busqueda: se usan para encontrar uno o varios elementos dentro de una estructura de datos atendiendo a un atributo o propiedad concreta, existen varios tipos de busqueda, como secuencial, binaria, etc:
- Algoritmos de ordenamiento: se aplican para ordenar elementos en un listado que esta desordenado, atendiendo a criterios y atributos concretos, el orden puede ser numerico, alfanumerico, acendente o decendente y se puede definir si solo se ordenara un segmento o todo el conjunto. Existen en la actualidad varios algoritmos de este tipos siendo algunos de los mas conocidos los de burbuja, rapido y por seleccion.
- Algoritmos dinamicos: estos dividen el problema complejo en subproblemas sencillos, calculando la solucion de ellos, almacenan los resultados y luego componen la solucion final usando los datos. Un tipo de este algoritmo es la recursividad, como para resolver el factorial por ejemplo.
Busqueda de patrones
Un elemento clave para diseñar un algoritmo es la busqueda de patrones, aqui tratamos de ver si podemos generalizar maneras de abordar el problema, ya que es una forma de resolver nuevos problemas basandose en elementos y/o soluciones ya existentes, lo que implica entre otras cosas:
- Identificar patrones y puntos en comun en artefactos (objetos/entidades)
- Adaptar soluciones o partes de soluciones, para que se apliquen a toda una clase de problemas similares.
- Transferir ideas y soluciones de una clase de problema a otra.
Como detectar patrones
Para detectar patrones como se expuso anteriormente, se debe de detectar regularidades y similitudes en un elemento o conjunto de elementos, acciones, procesos u otros objetos (entidades) que se este abordando. Entre las acciones mas comunes que hacemos para detectar patrones estan:
- Identificar redundancias que podemos automatizar
- Preveer comportamientos o resultados
- Simplificar problemas complejos al dividirlos en partes reconocibles
- Expresar el patron en una regla (nonmenclatura) o formula
- Verificar si algo se repite en distintas situaciones
Tecnicas y tacticas que podemos utilizar
Para detectar patrones podemos utilizar una serie de tacticas que nos pueden facilitar la tarea, estas estrategias nos ayudan a detectar patrones facilmente ya que al aplicarlas salen a relucir patrones y regularidades. Algunas de estas son:
Tinkering
El tinkering es jugar o experimentar con objetos u artefactos nuevos de una manera similar a como los bebes y niños pequeños interactuan con el mundo, tocando y desarmando los objetos para descubrir como funcionan. Esto esta estrechamente relacionado con el pensamiento logico ya que mediante una experimentacion (algunas veces improvisada) se busca ver que pasa, de manera que mientras interactuamos, vamos adquiriendo experiencias de causa-efecto, que nos permiten ver su comportamiento. Ej: “Si pulso aqui, entonces sucede esto”. Esto aunque simple e intutivo, se puede aplicar de manera muy efectiva para detectar patrones, ademas aplicando los principios del pensamiento computacional, podemos hacer del tinkering una estrategia sofisticada ya que esta de manera natural, nos permite aplicar los principios de la descomposicion y por ende el reconocimiento de patrones. Basicamente el “punchar aqui y picar alla para ver que pasa”, no solo permite la exploracion y experimentacion, sino que permite el refinamiento y perfeccionamiento de una solucion.
Iteracion
Otra tecnica es la deteccion de iteraciones o bucles. Una iteracion o repeticion no es mas que el proceso por el cual se da una sucencion de acciones o eventos N cantidad de veces, en el pensamiento computacional y algoritmico, esto se hace generalmente con el objetivo de convertir una secuencia larga de instrucciones en una mas corta optimizando el proceso. Esto se logra detectando que instrucciones o acciones se repiten en un programa, utilizando la generalizacion y el reconocimiento de patrones. Por ejemplo si quisieramos crear una solucion para dibujar un cuadrado en un lienzo podriamos hacer algo como esto.
1. Avanzar 4 posiciones
2. Girar 90 grados
3. Avanzar 4 pocisiones
4. Girar 90 grados
5. Avanzar 4 posiciones
6. Girar 90 gradosSin embargo, al ver que las instrucciones “girar y avanzar” se repiten podemos simplificar esto y optimizar el algoritmo mediante un bucle
Repetir 4 veces:
1. Avanzar 4 posiciones
2. Girar 90 grados
Con esto conseguimos que con menos instrucciones logremos el mismo resultado.
Secuencia y analisis de secuencia
La secuencia es como llamaos al orden en que las instrucciones estan organizadas, en los algoritmos, las secuencias estan bien definidas y estructuradas y se siguen al pien de la letra, de ahi la importancia de tener mucho cuidado y observacion con el orden y de conocer el orden exacto en el que deben estar dispuestas para que se cumplan con eficacia, por ejemplo en la secuencia anterior de como dibujar un cuadrado (la primera secuencia de ejemplo) si intercambiasemos la posicion 2 y 3 del algoritmo esta fallara ya que no dibujara un cuadrado.
En el analisis de secuencia podremos tratar estudiar la serie ordenada de eventos para averiguar patrones. Con esto podemos tratar de detectar cosas como repeticiones (se repite varias veces), patrones temporales (ciertos eventos suceden despues de otros), dependencias causales (una accion provoca otra reaccion), anomalias (interrupciones o secuencias que rompen el patron), etc.
Abstraccion
Finalmente con la abstraccion podemos utilizarla para la deteccion de patrones al ignorar los detalles especificos e irrelevantes para centrarse en lo que realmente importa. Al simplificar podemos encontrar regularidades que antes no veiamos ya que estaban escondidas entre los detalles, generalizar soluciones a multiples casos distintos pero que comparten similitudes y facilitar la automatizacion y documentacion clara para una mejor comprension del objeto u elemento.
Abstraccion para la generalizacion
Una vez identificado los patrones podemos pasar a la generalizacion, para ello es necesario la abstraccion que en este sentido es el proceso de hacer que un artefacto (objeto o entidad) sea mas comprensible ocultando sus detalles menos importanes, lo que permite lo siguiente:
- Reducir la complejidad eliminando detalles innecesarios
- Elegir una forma de representar un artefacto u objeto que permita manipularlo eficientemente
- Ocultar la complejidad de un artefacto u objeto reduciendo la complejidad funcional a algo mas esencial y simple
- Ocultar la complejidad de los datos, por ejemplo el uso de estructuras de datos.
- Identificar relaciones entre abstracciones
- Filtrar la informacion al desarollar soluciones
Evaluacion
La evaluacion es el proceso por el cual se pretende asegurar que una solucion es buena y adecuada para su proposito. Generalmente se busca lo siguiente:
- Evaluar que un artefacto es adecuado para su propósito.
- Evaluar si un artefacto hace lo correcto (corrección funcional).
- Diseñar y ejecutar planes de prueba e interpretar los resultados (pruebas).
- Evaluar si el desempeño de un artefacto es suficientemente bueno (utilidad:
efectividad y eficiencia). - Comparar el desempeño de artefactos que hacen lo mismo.
- Hacer concesiones entre peticiones y demandas en conflicto.
- Evaluar si un artefacto es fácil de usar para las personas (usabilidad).
- Evaluar si un artefacto brinda una experiencia positiva apropiada cuando se usa
(experiencia del usuario). - Evaluación de cualquiera de los anteriores teniendo en cuenta la especificación
y los criterios establecidos. - Revisar paso a paso los detalles de procesos/algoritmos/código para averiguar lo
que hacen (ejecución en seco/ rastreo). - Usar argumentos rigurosos para justificar que un algoritmo funciona (prueba).
- Utilizar argumentos rigurosos para comprobar la usabilidad o el rendimiento de
un artefacto (evaluación analítica). - Utilizar métodos que impliquen la observación de un artefacto en uso para evaluar
su usabilidad (evaluación empírica). - Evaluar si un producto cumple con los criterios generales de desempeño
(heurística).
Ciclo del pensamiento computacional

Nota: este ciclo se repite varias veces
Referencias
- [@posadaprietoPensamientoComputacionalCurriculum2022]
Relacionado - Como planificar un proyecto (agil)
- Como planificar un proyecto (estructurado)
- Sistema de investigacion y documentacion profunda
- Metodologia de la investigacion
- Every Programming Concept Explained in 15 Minutes - YouTube
[!!info|Recomendado|var(--color-green-rgb)]