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
- Inicio, proceso autogenerado y fin.
- Inicio, proceso y fin determinado.
- Inicio, proceso indeterminado.
- Inicio, proceso y fin incodicionado.
- DIAGRAMA DE BLOQUE
- DIAGRAMA DE FLUJO
- DIAGRAMA DE PASO DE DATOS
- DIAGRAMA DE SISTEMA
- Diagrama de flujo Lineal
- Diagrama de flujo Condicional
- Simples
- Dobles
- Múltiples
- Múltiples (En caso de)
Diagrama de Flujo Condicional Simple
Diagrama de Flujo Condicional Doble
Diagrama de Flujo Condicionales Múltiples
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.
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:
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.
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.
¿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.







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.
ResponderEliminarMuy 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.
ResponderEliminarMuy buena explicación, me ha servido de mucho. Muchas gracias!
ResponderEliminarMe sirvió de mucho la explicación la explicación de los diagramas de flujo, gracias
ResponderEliminarIncreíble explicación
ResponderEliminarGracias entendi mejor el tema de lenguajes y algoritmos.
ResponderEliminarAlgun correo para asesoría personalizada?
Muchas Gracías por la información, me sirvió bastante ya que explica muy bien tantas dudas acerca de los pensamientos algoritmicos!
ResponderEliminarExcelente ��me sirvio de mucho esta explicacion
ResponderEliminarExcelente información me sirvió para mi investigación
ResponderEliminarExcelente explicación sobre el tema, las animaciones hacen mucho más interesante la lectura.
ResponderEliminarBuena la información sobre el pensamiento algorítmico, sus tipos y características. Gracias y felicidades.
ResponderEliminarBuena información me ayudo mucho para mi tarea Gracias
ResponderEliminarQue buena información!
ResponderEliminar10/10, aclaraste mis dudas
Muy buena información y de excelente ayuda!
ResponderEliminarTiene todo el contenido que necesito para mi investigación Gracias!
ResponderEliminar