Pensamiento Algorítmico

¿Qué es un pensamiento algorítmico?

Es la capacidad de entender, ejecutar, evaluar y crear algoritmos. Se refiere al desarrollo y uso de algoritmos que puedan ayudar a resolver un tipo específico de problema o a realizar un tipo específico de tarea.

La evaluación de algoritmos nos ayuda a comprender en sí de qué trata el algoritmo, esto implica la determinación de si un algoritmo realmente resuelve una tarea dada.

Y finalmente, el pensamiento algorítmico incluye la capacidad de crear nuevos algoritmos. Este es probablemente el aspecto más desafiante del pensamiento algorítmico. Dada una tarea, se puede crear una serie de precisas, ¿instrucciones paso a paso que siempre resuelve la tarea correctamente? Obviamente, la complejidad de la tarea tiene un gran impacto en la complejidad de un algoritmo que cumplir con la tarea. Las tareas simples pueden típicamente llevarse a cabo con algoritmos simples, mientras que las tareas complejas requieren típicamente algoritmos más complejos

Tipos de Algoritmos

Algoritmos Cualitativos: Son aquellos que hacen referencia a las habilidades y cualidades del programador. Estos se clasifican en:

·         Algoritmos de Razonamiento: Son aquellas secuencias que pasa su desarrollo utilizan solamente los elementos que nos indican en el problema

·         Algoritmos Generales: Son aquellas secuencias que se desarrollan utilizando la aplicación de acciones que se realizan en la vida cotidiana. En este tipo de algoritmo es muy importante la vivencia del programador y sus habilidades para resolver problemas.

Algoritmos Cuantitativos: Son aquellos en los que su elemento principal es el uso de cantidades (valores) los cuales son representados por variables o constantes. Sólo tiene una clasificación que es:

·         Algoritmos Científicos: Son secuencias lógicas que permiten efectuar procesos utilizando para ello cálculos o aplicación de fórmulas. Las ciencias que se agrupan son: Física, Matemáticas, Contabilidad, Estadística, etc.

Algoritmos Estáticos: Son los que funcionan siempre igual, independientemente del tipo de problema tratado.

Algoritmos Adaptativos: Son algoritmos con cierta capacidad de aprendizaje.

Algoritmos Probabilísticos: Son algoritmos que no utilizan valores de verdad bamboleantes sino continuos.

Algoritmo Cotidiano: Es la serie de pasos que realizamos en nuestra vida diaria para realizar las diferentes tareas y actividades comunes, desde los pasos al levantarnos, así como ir de compras, etc.

Algoritmo Voraz: Un algoritmo voraz es aquel que, para resolver un determinado problema,consistente en elegir la opción óptima en cada paso local con la esperanza de llegar a una solución general óptima.

Algoritmo Determinista: Es un algoritmo que, en términos informales, es completamente predictivo si se conocen sus entradas.

Algoritmo Heurístico: Es un algoritmo que abandona uno o ambos objetivos.

Algoritmo de vuelta Atrás: Son algoritmos que han sido revocados al observar su comportamiento. Típicamente son aproximaciones del algoritmo original que son construidos para propósitos como competición o estudios.

Algoritmo computacional: Son los algoritmos que se hacen con una computadora; muchos de estos algoritmos son más complejos y por eso necesitan ser realizados a través de una máquina. También pueden ser algoritmos cuantitativos que se optimizan.

Algoritmo no computacional: Estos algoritmos son aquellos que no pueden realizarse con una computadora; por ejemplo, la programación de un televisor.

Lógica Gráfica o Diagrama

Es la secuencia que especifica en forma simbólica como seguirán las instrucciones expresando de modo gráfico y ordenado el proceso para cumplir un fin determinado.
Todo diagrama debe tener inicio y fin, salvo ciertas órdenes concretas que determinen la forma específica de la elaboración gráfica del proceso. Así podemos indicar que los diagramas tienen:
  • Inicio, proceso autogenerado y fin.
  • Inicio, proceso y fin determinado.
  • Inicio, proceso indeterminado.
  • Inicio, proceso y fin incodicionado.
Se debe tener presente que el diagrama es un proceso gráfico de apoyo al programador, por cuanto nos muestra todas las ocurrencias de un proceso y por lo tanto es la mejor visualización del problema propuesto.
    Clasificación de los diagramas
Dependiendo de la orientación que se le brinde a los diagramas estos se clasifican en:
  • DIAGRAMA DE BLOQUE
  • DIAGRAMA DE FLUJO
  • DIAGRAMA DE PASO DE DATOS
  • DIAGRAMA DE SISTEMA

Herramientas para desarrollar un pensamiento algorítmico
Diagramas de Flujo.-
Permite representar las instrucciones que definen operaciones u decisiones lógicas para la computadora, orientadas al tratamiento de datos.
    Clasificación
  • Diagrama de flujo Lineal
  • Diagrama de flujo Condicional
Diagrama de Flujo Lineal
Es aquel diagrama en que se representan simbólicamente las instrucciones en forma secuencial, es decir, una tras otra. En este tipo de diagramas no existen condicionales.

Diagrama de Flujo Condicional
Los condicionales se usan cuando el programa tiene que tener dos comportamientos diferentes en función de uno u otro parámetro.
Los condicionales se puede leer de la siguiente de esta forma Si se cumple una condición ejecuta una serie de comandos, si no se cumple ejecuta otra serie de comandos diferente. La condicional se representa con un rombo que también es conocido como "Toma de decisiones" en el que metemos la condición y en cada una de las ramas escribimos la serie de comandos que tendríamos que ejecutar en uno u otro caso. Los diagramas de flujos condicionales se subdividen en:
  • Simples
  • Dobles
  • Múltiples
  • Múltiples (En caso de)

Diagrama de Flujo Condicional Simple

Las estructuras condicionales simples se les conoce como “Tomas de decisión”. Estas tomas de decisión tienen la siguiente forma:


Diagrama de Flujo Condicional Doble

Las estructuras condicionales dobles permiten elegir entre dos opciones o alternativas posibles en función del cumplimiento o no de una determinada condición. Se representa de la siguiente forma:


Diagrama de Flujo Condicionales Múltiples

Las estructuras de comparación múltiples son tomas de decisión especializadas que permiten comparar una variable contra distintos posibles resultados, ejecutando para cada caso una serie de instrucciones específicas. La forma común es la siguiente:

Diagrama de Flujo Condicionales Múltiples (En caso de)

Las estructuras de comparación múltiples, es una toma de decisión especializada que permiten evaluar una variable con distintos posibles resultados, ejecutando para cada caso una serie de instrucciones específicas. La forma es la siguiente:

Scratch.-

Scratch es un lenguaje de programación creado por el MIT y especialmente diseñado para que todo el mundo pueda iniciarse en el mundo de la programación. Sirve para crear historias interactivas, juegos y animaciones; además de facilitar la difusión de las creaciones finales con otras personas vía Web.

El nombre proviene de la palabra: “Scratching” que, en los lenguajes de programación, significa aquellos trozos de código que pueden ser reutilizados, fácilmente combinables y adaptados para nuevos usos.

Es un lenguaje que ha tenido una enorme difusión gracias a su gratuidad (es software libre) y a su facilidad de uso.

Una de las cosas más interesantes de Scratch es que esas acciones o comportamientos tienen forma de puzzle y nuestra misión como programadores será cocinar esas piezas para conseguir un determinada acción o comportamiento. Así que en esencia programa se convierte en algo parecido a resolver un puzzle, lo que elimina una de las principales barreras que tienen los neófitos en el mundo de la programación que es el aspecto árido y complejo de los entornos de programación. Convirtiendo el proceso de programar en algo parecido a un juego.

Las acciones y comportamientos están divididas en categorías y son estas:

Movimiento: Mover y girar un objeto por la pantalla.

Apariencia: Cambiar la visualización del objeto: el fondo, hacerlo más grande o pequeño, etc.

Sonido: Hacer sonar secuencias de audio.

Lápiz: Dibujar controlando el tamaño del pincel el color y la sombra del mismo.

Datos: Crear variables y su asignación en el programa.

Eventos: Maneadores de eventos que “disparan” determinadas acciones en un bloque.

Control: Condicionales: if-else, “forever”, “repeat”, and “stop”.

Sensores: Los objetos o “sprites” pueden interaccionar con el entorno o con elementos creados por el usuario como un robot lego por ejemplo.

Operators: Son operadores matemáticos, generadores aleatorios de números, cooperadores de posiciones.

 Más bloques: Bloques propios y controladores de aparatos externos.


Blockly.-

Es un lenguaje de programación visual compuesto por un sencillo conjunto de comandos que podemos combinar como si fueran las piezas de un rompecabezas. Es una herramienta muy útil para el que quiera aprender a programar de una forma intuitiva y simple.

Blockly permite a los programadores principiantes a concentrarse en la lógica. Se le ofrece una serie de comandos y cómo se pueden colocar juntos. No hay paréntesis desequilibrados, cadenas de escape, no hay puntos y coma que falten.

Google ha lanzado una versión inicial de este lenguaje visual licenciado bajo licencia Apache 2.0, influenciado por otros tipos de herramientas gráficas de codificación como App Inventor o Scratch, del que ya hemos hablado en varias ocasiones en Genbeta Dev como una excelente forma de enseñar programación a niños.

Blockly permite arrastrar los distintos componentes de control, lógica, operaciones matemáticas, texto, listados y procesos para crear sencillos scripts que podremos exportar a lenguajes como JavaScript, Dart, Python o XML. Esto último es un interesante punto a tener en cuenta. Aunque de momento no está concebido para aplicaciones muy complejas, como ellos mismos explican en la documentación “no intente usarlo para mantener el Kernel de Linux”, aunque puede ser usado por programadores experimentados para escribir un guión rápido para luego exportarlo a código.

De momento, Blockly se encuentra en una versión preliminar dirigida a desarrolladores de aplicaciones y no para usuarios finales. Hay diversas demos que podemos probar que integran el editor de Blockly para hacer algunas aplicaciones sencillas como:


El lenguaje C.-

Se trata de un lenguaje de tipos de datos estáticos, débilmente tipificado, de medio nivel, pero con muchas características de bajo nivel. Dispone de las estructuras típicas de los lenguajes de alto nivel pero, a su vez, dispone de construcciones del lenguaje que permiten un control a muy bajo nivel. Los compiladores suelen ofrecer extensiones al lenguaje que posibilitan mezclar código en ensamblador con código C o acceder directamente a memoria o dispositivos periféricos.

Uno de los objetivos de diseño del lenguaje C es que sólo sean necesarias unas pocas instrucciones en lenguaje máquina para traducir cada elemento del lenguaje, sin que haga falta un soporte intenso en tiempo de ejecución. Es muy posible escribir C a bajo nivel de abstracción; de hecho, C se usó como intermediario entre diferentes lenguajes.

En parte a causa de ser de relativamente bajo nivel y de tener un modesto conjunto de características, se pueden desarrollar compiladores de C fácilmente. En consecuencia, el lenguaje C está disponible en un amplio abanico de plataformas (más que cualquier otro lenguaje). Además, a pesar de su naturaleza de bajo nivel, el lenguaje se desarrolló para incentivar la programación independiente de la máquina. Un programa escrito cumpliendo los estándares e intentando que sea portátil puede compilarse en muchos computadores.

C se desarrolló originalmente (conjuntamente con el sistema operativo Unix, con el que ha estado asociado mucho tiempo) por programadores para programadores. Sin embargo, ha alcanzado una popularidad enorme, y se ha usado en contextos muy alejados de la programación de software de sistema, para la que se diseñó originalmente.

    Características

    Propiedades

    ·         Un núcleo del lenguaje simple, con funcionalidades añadidas importantes, como funciones matemáticas y de manejo de archivos, proporcionadas por bibliotecas.

    ·         Es un lenguaje muy flexible que permite programar con múltiples estilos. Uno de los más empleados es el estructurado "no llevado al extremo" (permitiendo ciertas licencias de ruptura).

    ·         Un sistema de tipos que impide operaciones sin sentido.

    ·         Usa un lenguaje de preprocesado, el preprocesador de C, para tareas como definir macros e incluir múltiples archivos de código fuente.

    ·         Acceso a memoria de bajo nivel mediante el uso de punteros.

    ·         Interrupciones al procesador con uniones.

    ·         Un conjunto reducido de palabras clave.

    ·         Por defecto, el paso de parámetros a una función se realiza por valor. El paso por referencia se consigue pasando explícitamente a las funciones las direcciones de memoria de dichos parámetros.

    ·         Punteros a funciones y variables estáticas, que permiten una forma rudimentaria de encapsulado y polimorfismo.

    ·         Tipos de datos agregados (struct) que permiten que datos relacionados (como un empleado, que tiene un id, un nombre y un salario) se combinen y se manipulen como un todo (en una única variable "empleado").

    Carencias

    ·         Recolección de basura nativa, sin embargo, se encuentran a tal efecto bibliotecas como la "libgc" desarrollada por Sun Microsystems, o el Recolector de basura de Boehm.

    ·         Soporte para programación orientada a objetos, aunque la implementación original de C++ fue un preprocesador que traducía código fuente de C++ a C.

    ·         Funciones anidadas, aunque GCC tiene esta característica como extensión.

    ·         Soporte nativo para programación multihilo.

    Estrategias de Programación.-

    ¿Y qué tal si llevas al extremo tu pensamiento algorítmico? Así es, después de los procesos aquí señalados, si deseas seguir desarrollando tu habilidad estudia estas excelentes estrategias después de haber trabajado algunos días con el lenguaje C y llegado hasta las estructuras de datos elementales, estarás listo para llevar al extremo tu pensamiento algorítmico con las siguientes estrategias:

    •  Recursión
    •    Divide y vencerás
    •  Algoritmos voraces
    • Algoritmos geométricos
    • Algoritmos genéticos

    Existen más estrategias, pero con estas te inicias en el desarrollo de tu pensamiento computacional avanzado.

    Estudiantes que participan en eventos académicos donde se requieren habilidades de pensamiento algorítmico, han alcanzado un grado de avance considerable y resuelven problemas complejos. Tal es el caso de los concursantes de las olimpiadas de informática. Existen científicos y académicos en busca de más instrumentales, a través de la inteligencia artificial también se han desarrollado robots que tienen lenguaje de programación para interactuar con él y así implementar algoritmos elementales en los robots.


    Referencias:

    • https://es.slideshare.net/ZaoryZaory/introduccion-al-pensamiento-algoritmico#:~:text=%EF%82%B4%20Pensamiento%20algor%C3%ADtmico%20es%20la,ejecutar%2C%20evaluar%20y%20crear%20algoritmos.&text=%EF%82%B4%20Ser%20un%20PENSADOR%20ALGOR%C3%8DTMICO,personas%20les%20resulta%20muy%20dif%C3%ADcil
    • http://9fc6ff.medialib.edu.glogster.com/srHr41MbmGcjLFPT87hg/media/fd/fde2c07573537b9b9622e1e0ffd55f93a30e6aa6/guia1-1-algoritmosconceptosbasicos.pdf
    • https://fisicaequimicagalen.files.wordpress.com/2016/08/condiconales.pdf
    • https://desarrolloweb.com/articulos/2225.php
    • https://www.gestiopolis.com/herramientas-para-desarrollar-el-pensamiento-algoritmico/
    • https://www.genbeta.com/desarrollo/google-blockly-un-lenguaje-visual-para-aprender-a-programar
    • https://www.ictea.com/cs/index.php?rp=%2Fknowledgebase%2F8834%2FiQue-es-el-lenguaje-de-programacion-C.html
    • https://www.lifeder.com/tipos-algoritmos/
    • http://desarrollologicodelpensamiento.blogspot.com/
    • Fundamentos de Programación 1 (Libro)
    • Comentarios

      1. Buen blog men, lo único que vi que no es tan bueno es que se alarga un poco en explicaciones, pero en resto muy bien.

        ResponderEliminar
      2. Muy interesante la información sobre el pensamiento algorítmico, sus tipos y características. Además debo añadir que la animaciones llaman mucho la atención y están acorde al tema tratado.

        ResponderEliminar
      3. Muy buena explicación, me ha servido de mucho. Muchas gracias!

        ResponderEliminar
      4. Me sirvió de mucho la explicación la explicación de los diagramas de flujo, gracias

        ResponderEliminar
      5. Gracias entendi mejor el tema de lenguajes y algoritmos.
        Algun correo para asesoría personalizada?

        ResponderEliminar
      6. Muchas Gracías por la información, me sirvió bastante ya que explica muy bien tantas dudas acerca de los pensamientos algoritmicos!

        ResponderEliminar
      7. Excelente ��me sirvio de mucho esta explicacion

        ResponderEliminar
      8. Excelente información me sirvió para mi investigación

        ResponderEliminar
      9. Excelente explicación sobre el tema, las animaciones hacen mucho más interesante la lectura.

        ResponderEliminar
      10. Buena la información sobre el pensamiento algorítmico, sus tipos y características. Gracias y felicidades.

        ResponderEliminar
      11. Buena información me ayudo mucho para mi tarea Gracias

        ResponderEliminar
      12. Que buena información!
        10/10, aclaraste mis dudas

        ResponderEliminar
      13. Muy buena información y de excelente ayuda!

        ResponderEliminar
      14. Tiene todo el contenido que necesito para mi investigación Gracias!

        ResponderEliminar

      Publicar un comentario