Programación en general: el mundo de los algoritmos
¿Qué¿Qué es un Algoritmo?
Un algoritmo es un conjunto de instrucciones estructuradas que tienen como objetivo resolver un problema. Los algoritmos estánestán presentes en nuestra vida cotidiana en multiples campos, desde una receta de cocina que nos indica que ingredientes necesitamos, en que orden y como debemos prepararlos para obtener el plato deseado; pasando por las instrucciones de montage de un LEGO o un mueble de IKEA; una partitura musical, que indica que notas tocar para reproducir una determinada pieza o una guíaguía de color, que nos dice, que tenemos que mezclar azul y amarillo para obtener verde.
Estas instrucciones o algoritmos pueden representarse/implementarse utilizando diferentes lenguajes y estructuras (códigoscódigos de representación)representación).
Por ejemplo:
- Mezclando azul y amarillo obtendremos verde. Si a ese verde le añadimosañadimos blanco sera verde claro, pero si le añadimosañadimos negro sera verde oscuro.
+blanco = verde claro
- Azul + Amarillo = Verde <
+negro = verde oscuro
+ [ ] = [ ]
- [ ] + [ ] = [ ] <
+ [ ] = [ ]
En computación,computación, los programas son algoritmos escritos en un lenguaje especifico y comprensible para la máquinamáquina, ya que, es la maquina la que tiene que realizar esas acciones.
Al igual que en el ejemplo anterior, en el que hemos escrito con tres códigoscódigos de representaciónrepresentación diferentes el algoritmo que resuelve el problema '¿cómo¿cómo crear color verde?', en la programaciónprogramación pasa igual, y existen múltiplesmúltiples estructuras, lenguajes y entornos, que nos permitiránpermitirán implementar el algoritmo que solucione nuestro problema.
Es muy importante tener siempre en mente que EN PROGRAMACIÓNPROGRAMACIÓN NO HAY UN SOLO CAMINO CORRECTO :)
Programar es un proceso creativo y constructivo, en el que, de diferentes formas, se pueden obtener resultados equivalentes. Aunque siempre podrápodrá haber diferencias en los costes, tanto de tiempo como de memoria.
Existen muchos lenguajes de programaciónprogramación diferentes y aunque unos y otros frecuentemente tienen elementos en común,común, cada lenguaje se rige por sus reglas específicasespecíficas. Esto implica que un comando o elemento que funciona en un lenguaje puede no funcionar en otro, o funcionar de otra manera; por lo que tendremos que conocer y tener en cuenta, en cada caso, los códigoscódigos de representaciónrepresentación del lenguaje y el entorno en el que estemos programando.
Ejemplo de cómocómo imprimir en 4 lenguajes diferentes la misma frase "Hello World":
Figura 1. "Hello World" en cuatro lenguajes diferentes (C, C++, Java, Python)
Ejercicio 1 : Busca 2 ejemplos de algoritmos en tu vida cotidiana y represéntalosrepreséntalos con dos códigoscódigos diferentes.
¿Qué¿Qué es la programación?programación?
La programaciónprogramación informática,informática, se refiere al proceso de construcciónconstrucción de estos grupos de instrucciones, para que sean procesadas por un ordenador o microcontrolador. La programación,programación, se basa en flujos de datos que se almacenan, comprueban y transforman de manera estructurada.
En un sistema computacional vamos a tener elementos de dos tipos: el software, que es la parte inmaterial, y el hardware, que es la parte material.
El software, son los componentes lógicoslógicos ("Software", 2022), las instrucciones o algoritmos, es decir, los programas que seránserán seguidos por el hardware. El hardware, son los componentes físicosfísicos que constituyen el ordenador/computadora (disco duro, tarjeta gráfica,gráfica, pantalla, ratón,ratón, altavoz, cámaracámara ...). El software, le dice al ordenador lo que tiene que hacer, para lograr el resultado deseado. El software es el ADN de la máquina.máquina. No obstante, pese a que esta distincióndistinción estáestá ampliamente extendida, en realidad, no estáestá tan claro dóndedónde debe situarse la línealínea que establece la diferencia entre hardware y software.
Lo que sísí estáestá claro es que esta combinacióncombinación de hardware y software constituye el sistema, es decir, la infraestructura que permitirápermitirá que los datos introducidos en un programa, a los que se conocen como inputs/inlets/entrada, sean procesados, es decir, que sean comprobados, leídos,leídos, almacenados, modificados.
El resultado que este programa proporciona se conoce como output/outlet/salida. Esta terminologíaterminología y estructura (entrada -> proceso -> salida), se aplica también,también, a los procesos internos de los programas, ya que, un programa estáestá constituido por otros programas, que son, multiples procesos conectados e interrelacionados.
Esta idea de entrada y salida de datos, nos va a acompañaracompañar durante todo el curso, ya que, en nuestros proyectos vamos a trabajar con un conjunto de datos de entrada, que nos permitiránpermitirán obtener un resultado o salida. Generalmente, todo proceso tiene una entrada de datos (input), un procesamiento, durante el cual se realizan acciones con esos datos, y una salida de datos(output) que es el resultado del proceso. Programar es la acciónacción de construir esos programas para ordenador (Scratch, 2022).
Para explicar y hacer másmás comprensible cómocómo funcionan los algoritmos, suelen emplearse metáforas.metáforas. Así,Así, es posible establecer similitudes entre algo tan abstracto, como es la programación,programación, con procesos que nos resultan másmás familiares. Vamos a tomar como metáforametáfora los sistemas hidrográficos:hidrográficos: ríos,ríos, arroyos, pozos, lagos, meandros, y las infraestructuras que el ser humano introduce en estos sistemas fluviales para modificar el curso y estado del agua: presas, centrales hidroeléctricas,hidroeléctricas, sistemas de canalizacióncanalización para el riego, acueductos o simples marcas en la pared de un canal, para medir el nivel del agua y obtener informacióninformación acerca del crecimiento de los ríos.ríos.
Figura 2. Mapa de embalses de la cuenca del Ebro.
Por ejemplo:
En Zaragoza el nivel del agua del rio se mide una vez (Proceso 0: contar)comparar) una vez todos los díasdías (Proceso 1: comparar)contar) y se apunta en una libreta (Proceso 2: almacenar). Este nivel, ha de ser siempre superior a 50 (Proceso 3: comparar). Cuando el nivel de agua en Zaragoza, desciende por debajo de 50, se avisaráavisará al embalse (Proceso 4.1.1: enviar información)información) para que deje salir másmás agua (Proceso 4.1.2: cambiar), si el nivel de agua no ha bajado por debajo de 50, no se avisara al embalse y el agua que deja salir este, seguiráseguirá siendo la misma (Proceso 4.2: no cambiar). Nombre descriptivo de este programa: ComprobaciónComprobación del estado del agua en Zaragoza, y estado del embalse en funciónfunción de esa comprobación.comprobación.
El agua de este sistema hidrográficohidrográfico va a ser los datos. Y las infraestructuras introducidas por el ser humano para controlar estas aguas van a ser los programas que procesaran estos datos. De esta manera, iremos encadenando procesos por los que los datos pasan para conseguir nuestro objetivo.
Ejercicio 2: Identifica y etiqueta los diferentes procesos que conforman los algoritmos que has elegido para el ejercicio 1. Por etiqueta, nos referimos a que clasifiques estos procesos como en el ejemplo anterior, en funciónfunción del tipo de acciónacción que se realiza en cada proceso, utilizando categoríascategorías como comparar, almacenar o cualquier otra que se te ocurra.
En la Figura 3. podemos ver un ejemplo animado de programaciónprogramación gráficagráfica, que visualmente, se asemeja al mapa de la cuenca hidrográficahidrográfica del Ebro de la Figura 2. Vemos cajitas conectadas por unas líneas,líneas, a travéstravés de las cuales, unas bolitas se desplazan de una caja a otra. Cada una de las cajitas representa un proceso, y las bolitas son los datos que entran por la parte izquierda de una cajita, en la cajita son procesados, y salen por la parte derecha en direccióndirección a otra cajita. La direccióndirección del desplazamiento de las bolitas, indica la direccióndirección de los datos a travéstravés de estos procesos, que en este caso fluyen de izquierda a derecha, y es en este orden en el que se procesan.
Figura 4. Detalle de la figura 3. que muestra un mismo outlet puede alimentar los inlets de varios procesos (el mismo outlet de Time hace de input para Select, Add y Add) y un proceso puede tener varios inlets (Select tiene 3 inlets).
VemosEn la Figura 4, vemos que la salida de una sola cajita, puede estar conectada con las entradas de varias cajitas, ya que, el mismo resultado de un proceso puede alimentar varios procesos (Cajita Time). Y que, un proceso puede tener varios datos de entrada diferentes, que proceden de diferentes procesos previos (Cajita Select).
Figura 5. Detalle de la figura 3. que muestra que un proceso puede tener varios outlets.
Y aunque en la Figura 5, no haya ninguna cajita con másmás de una de sus salidas conectadas a otras cajitas, vemos que una cajita o un proceso,proceso puedenpuede tener varias salidas diferentes (Cajitas "Expose Color" y "Material Set Color"). Cada salida,salida seranos proporcionara distintos datos, que serán el resultado de un procesosubproceso distinto,especifico llevado a cabo con los mismos datos de entrada. Por ejemplo la Cajita "Expose Color" toma como entrada un color y devuelve como salidas la cantidad de rojo (R), la cantidad de verde (G) y la cantidad de azul (B) que componen ese color.
Recordar, que cada lenguaje y entorno, tienen sus normas y por lo tanto el ejemplo de las Figuras 3, 4 y 5 también.también.
Diferencia entre datos e informacióninformación
Un dato es una representaciónrepresentación simbólicasimbólica (numérica,numérica, alfabética,alfabética, algorítmica,algorítmica, espacial, etc.) de un atributo o variable cuantitativa o cualitativa ("Dato", 2022), o sea: la descripcióndescripción codificada de un hecho empírico,empírico, un suceso, una entidad (Equipo editorial, Etecé,Etecé, 2021).
Para que los datos tengan sentido para nosotros, han de ser puestos en contexto, por si solos no significan nada.
Ejemplo de datos:
(19,25), (2022), (54.3, 56.2, 54.1, 49.6, 52.9, 53.2, 52.6), (L, M, X, J, V, S, D), (septiembre)
(20,26), (2021), (56.1, 58.3, 59.2, 55.8, 54.7, 54.6, 55.5), (L, M, X, J, V, S, D), (septiembre)
Arriba vemos varias listas de númerosnúmeros y caracteres, son un conjunto de datos, pero somos incapaces de saber quéqué representan.
Poner estos datos en contexto con otros datos: relacionarlos, compararlos, en definitiva, procesarlos; nos permite entender, que relaciónrelación existe entre los datos y los hechos, sucesos o entidades que representan. Al resultado comprensible del procesamiento y contextualizacióncontextualización de datos es a lo que llamamos informacióninformación.
Ejemplo de información:información:
Nivel del agua del ríorío Ebro en Zaragoza en la semana del 19 al 25 de septiembre de 2022 fue: lunes 19: 54.3 cm; martes 20: 56.2 cm; miércolesmiércoles 21: 54.1 cm; jueves 22: 49.6 cm; viernes 23: 52.9 cm; sábadosábado 24: 53.2 cm; domingo 25: 52.6 cm
Nivel del agua del ríorío Ebro en Zaragoza en la semana del 20 al 26 de septiembre de 2021 fue: lunes 20: 56.1 cm; martes 21: 58.3 cm; miércolesmiércoles 22: 59.2 cm; jueves 23: 55.8 cm; viernes 24: 54.7 cm; sábadosábado 25: 54.6 dm; domingo 26: 55.5 cm
Tipos de datos
NuméricoNumérico
Entero: Tipo de dato formado por una variable numéricanumérica que no cuenta con parte decimal ("Dato", 2020). En programación,programación, vamos a conocer este tipo de dato como int (integer)
Ejemplo int: dia del mes = 22
Real: Tipo de dato formado por una variable numéricanumérica que puede contar con parte decimal ("Dato", 2020). En programación,programación, vamos a conocer este tipo de dato como float
Ejemplo float: altura del agua = 49.6
Una variable de tipo float, siempre va a poder representar númerosnúmeros enteros y decimales, sin embargo, una variable de tipo int, solo podrápodrá representar númerosnúmeros enteros.
Texto
Caracter: Tipo de dato formado por una unidad o símbolosímbolo que puede ser una letra, un número,número, una mayúsculamayúscula o un signo de puntuación.puntuación. En programación,programación, vamos a conocer este tipo de dato como char (character).
Ejemplo char: dia de la semana = J
Cadena: Tipo de dato formado por un conjunto de caracteres dispuestos de forma consecutiva que se representa entre comillas. En programación,programación, vamos a conocer este tipo de dato como string.
Ejemplo string: nombre del mes del añoaño = "septiembre"
Una variable de tipo texto, tanto caráctercarácter como cadena, tambiéntambién puede representar númerosnúmeros enteros y decimales, sin embargo estos seránserán entendidos por el programa como datos textuales, no como datos numéricos.numéricos.
LógicoLógico
Boolean: Tipo de dato que puede representar dos valores: verdadero o falso.
Ejemplo boolean: El jueves 22 de 2022 el nivel del agua del rio Ebro en Zaragoza supera los 50 cm = Falso
Ejercicio 3: Identifica y separa los datos de la informacióninformación que has incluido en los algoritmos que has elegido para el ejercicio 1. Una vez tengas los datos separados, indica que tipo de datos son en tu algoritmo.
Figuras:
Figura 1: Tomada de "Hello World in Python | Python Program to Print Hello World" por FACE prep https://dev.faceprep.in/python/hello-world-in-python/
Figura 2: Tomada de "Mapas Temáticos"Temáticos" por ConfederaciónConfederación HidrográficaHidrográfica del Ebro https://www.chebro.es/ca/mapas-tematicos
Figura 3: Tomada de "Visualize that! Behind the scenes with Bolt for Visual Scripting" por Unity bloghttps://blog.unity.com/games/visualize-that-behind-the-scenes-with-bolt-for-visual-scripting
Figura 4: Tomada y recortada de "Visualize that! Behind the scenes with Bolt for Visual Scripting" por Unity bloghttps://blog.unity.com/games/visualize-that-behind-the-scenes-with-bolt-for-visual-scripting
Figura 5: Tomada y recortada de "Visualize that! Behind the scenes with Bolt for Visual Scripting" por Unity bloghttps://blog.unity.com/games/visualize-that-behind-the-scenes-with-bolt-for-visual-scripting
Referencias:
Dato. (2020, octubre 1). Equipo editorial, EtecéEtecé (Ed.), En Enciclopedia Concepto. Consultado el 19 septiembre 2022 en https://concepto.de/dato/
Dato. (2022, Septienbre 2) En Wikipedia. https://es.wikipedia.org/wiki/Dato
Dato en informática.informática. (2021, agosto 5). Equipo editorial, EtecéEtecé (Ed.), En Enciclopedia Concepto. Consultado el 19 septiembre 2022 en https://concepto.de/dato-en-informatica/
Pure Data (2022). Pure Data home. [Website/Pagina web] Pure Data. Consultado el 16 Agosto 2022 en http://puredata.info/
Scratch (n.d). Programming. Scratch wiki. Retrieved August 17, 2022 https://en.scratch-wiki.info/wiki/Programming
Software. (2022, Agosto 15). In Wikipedia. https://es.wikipedia.org/wiki/Software