Inicio Noticias El truco de la mente: los grandes lenguajes se están completando

El truco de la mente: los grandes lenguajes se están completando

Página 1 de 3

Este capítulo introductorio de mi nuevo libro sobre la naturaleza de la programación está dirigido tanto a programadores como a no programadores. En este extracto, analizamos qué hace que un idioma sea lo suficientemente «grande» para hacer el trabajo.

El truco de la mente: programación y pensamiento computacional

Compre ahora en Amazon

Lista de capítulos

El truco de la mente

Pequeños lenguajes

Los grandes lenguajes se están completando

El extraño accidente del gótico considerado dañino

Sobre ser variable

Representación

El ciclo zoológico

Módulos, subrutinas, procedimientos y funciones

Programación de arriba hacia abajo

Algoritmos

El método científico como depuración

El objeto de todo

La existencia de lenguas pequeñas sugiere que existen lenguas grandes y esto plantea la cuestión. «¿Qué necesitas para escribir un programa?» La respuesta debe ser un lenguaje de programación.

¿Qué tipo de lenguaje sería ese? Esta vez no hay una respuesta corta y sencilla, ¿o sí?

Nos familiarizamos con tres lenguajes de programación: el lenguaje de la geometría, el lenguaje de la aritmética y las expresiones regulares. Todos estos se han llamado lenguajes «pequeños» porque están limitados en las formas que ahora necesitamos aclarar. También necesitamos examinar qué hace que un lenguaje sea «excelente» y qué es exactamente lo que puede calcular.

Decisiones y repeticiones

Un programa es una lista de instrucciones, y el tipo de instrucciones en la lista depende del objeto con el que esté trabajando el programa. En el caso del lenguaje geométrico, Turtle Graphics, las instrucciones trataban de mover distancias específicas en direcciones específicas. En el caso del lenguaje pequeño de la aritmética, las instrucciones se referían únicamente a tomar números y realizar cálculos aritméticos simples en ellos, y en el caso de las expresiones regulares definimos clases de caracteres coincidentes.

Si las instrucciones que van en las listas son siempre diferentes, ¿cómo puede haber algo constante en los lenguajes de programación?

La respuesta es que cualquier lenguaje de programación razonablemente capaz siempre tiene la capacidad de tomar decisiones y repetir cosas. Por ejemplo, en una receta puede encontrar instrucciones:

«Si la salsa es dulce, agregue el limón»

Este es un condicional. No «agregue limón» cada vez. En su lugar, calculamos una condición «es la salsa dulce» y si eso es cierto, «agregamos limón».

El punto importante aquí es que la idea de condicional es algo que se encuentra en todos los lenguajes de programación, incluso si está bien escondido. Es un universal de programación.

Del mismo modo, dentro de una receta puede encontrar una instrucción como:

«Repite batiendo la nata hasta que espese»

o:

«Pon 5 cerezas encima del pastel»

En cualquier caso, está repitiendo una instrucción.

Esta repetición de una instrucción ocurre en todos los lenguajes de programación y también es un universal de programación. A veces está escondido y es difícil de ver. Por ejemplo, ¿»colocar 5 cerezas» es una repetición o solo una acción? Para un humano, las cosas son vagas y puede pensar en las instrucciones de diferentes maneras, pero puede ver que se repite «coloque una cereza». Cuando se trata de repeticiones, es probable que agrupemos acciones en una acción compuesta y apenas notemos que hay una repetición involucrada; lo damos por sentado.

Es cierto que los humanos estamos más acostumbrados a notar condicionales que repeticiones, pero cuando comiences a notarlo lo encontrarás por todas partes.

Se podría decir, incluso en esta etapa inicial, que es el uso de condicionales y repeticiones lo que hace que un lenguaje de programación sea mucho más que un lenguaje pequeño, pero las ideas son mucho más grandes que eso.

El flujo de control

Lo que hemos observado hasta ahora es que hay ideas comunes en todas las listas de instrucciones. Incluso si las instrucciones cambian, la forma en que podemos organizarlas para hacer las cosas sigue siendo más o menos la misma:

Puedes obedecer una instrucción tras otra.

Puede obedecer algunas instrucciones solo si una condición es verdadera

Puede repetir un bloque de declaraciones hasta que una condición sea verdadera

Lo sorprendente es que estas tres opciones son todo lo que hay: no hay nada más sofisticado que pueda encajar en esta combinación. Todas las listas de instrucciones se reducen a estas tres formas de obedecer las instrucciones.

Los programadores llaman al primero el flujo de control predeterminado, el segundo es un condicional y el tercero es un círculo. De hecho, constituyen las tres formas fundamentales del flujo de control. Puede pensar en la instrucción que se está ejecutando actualmente como la instrucción que actualmente tiene el control de lo que está sucediendo. A medida que avanza por las instrucciones, el control pasa de una instrucción a otra: este es el flujo de control.

Como ya hemos visto, solo hay tres formas básicas que esto puede tomar y puedes imaginarlas algo como:

El primero es el flujo de control predeterminado. El segundo es un condicional que omite una serie de declaraciones. El tercero es un bucle en el que el control vuelve a una declaración anterior. Estos a menudo se denominan «diagramas ferroviarios» porque son esencialmente las posibles trayectorias a través de un programa como si un tren viajara por las vías del flujo de control. Más técnicamente, la colección de posibles rutas a través de un programa se denomina flujo de gráfico de control. Las formas también corresponden al movimiento que haría su dedo si trazara el orden en el que obedece las instrucciones del programa.

Estas tres formas de control son todo lo que necesita, pero en este punto necesito introducir otra forma de control: recursividad. Este no es el lugar para discutirlo porque no es fácil entender qué es y qué lo hace diferente de los otros tres. Lo menciono aquí solo para permitir la posibilidad de que haya oído hablar de él o que sea consciente de él y desee saber dónde encaja. La respuesta simple es que en realidad no lo necesita porque se puede reducir a una combinación de los tres primeros. Esto puede ser cierto, pero la recursividad sigue siendo fascinante y de gran valor práctico, y puede aprender más en el Capítulo 10.

Marc Gomez
Vine a por tabaco y ya me quedé aquí. Cuando no estoy en el sótano de Tecnopasion suelo pasear por las calles de Barcelona.
RELATED ARTICLES