Soy un primer ministro no técnico y busco mejorar mi comprensión de la codificación. He estado codificando utilizando HTML. ¿Existen recursos que puedan ayudarme a entender desde un nivel conceptual / teórico de qué idiomas se tratan?

Al principio pensé: “No conozco ningún recurso como ese”, no eso explica qué es un lenguaje de programación. Para explicar qué es un lenguaje de programación, tendría que explicar “por qué” existen, las necesidades que satisfacen. Pero para obtener realmente esto, creo que necesitarás experimentar la programación en algo más grande que un ejemplo. De todos modos, aquí hay algunos pensamientos y un recurso que podría ayudar.

La programación (generalmente) le da a la computadora una serie de instrucciones a seguir. Generalmente se llama “declaraciones”. Las declaraciones se ejecutan una tras otra. Por ejemplo si necesito comprar huevos y leche.

Entrar en la tienda
Ve al refrigerador
Recoger la leche
Recoger los huevos
Ir al mostrador
Pagar por artículos
Llevar artículos a casa

y así. Podría dar estas instrucciones a una persona y pensarían que estoy siendo pedante o simplemente “raro”. Sin embargo, eso no es suficiente para una computadora. ¿Qué pasa si solo tengo $ 8 y los artículos cuestan $ 10 en total? La computadora no puede continuar sin más información.

si cost_of ($ milk) + cost_of ($ eggs)> $ 8 entonces
abortar()
más
pagar por artículos
llevar artículos a casa.
terminara si

Pues eso va a hacer. Pero tal vez sería mejor “intentar” comprar uno de los artículos y dejar el otro si no puedo pagarlo. Puede que tenga una preferencia y esto debe ser parte del programa. También me refiero a los “elementos” que la computadora necesita para saber a qué me refiero con esto. Entonces tal vez necesito decir $items = {$milk, $eggs} . El programa también necesita saber cuánta leche quiero y cuántos huevos. ¿Qué tipo de leche y huevos? El programa también tendría que manejar circunstancias excepcionales. ¿Qué pasa si se rompe un huevo? ¿Qué pasa si la tienda está cerrada?

Por supuesto, el programador preferiría decir “Ve a comprarme leche y huevos” y el problema se resolvería. Obviamente, la computadora carece de intuición por lo que estas cosas deben ser parte del programa. Sin embargo, hay algunas cosas que se pueden evitar o abstraer. Todos los lenguajes de programación tendrán algunas operaciones que están integradas, como sumar números o manipular datos. Todos los lenguajes de programación también permiten al programador crear abstracciones. Por ejemplo, el programador puede describir una acción genérica como encontrar un “artículo” en la tienda, y luego reutilizar esta acción para encontrar la leche y luego encontrar los huevos.

Suenan bastante triviales, entonces ¿por qué los menciono? Porque los diferentes idiomas proporcionan diferentes operaciones integradas y diferentes formas de crear abstracciones. Por ejemplo, algunos lenguajes proporcionan administración automática de memoria, lo que significa que el programador no necesita rastrear y liberar memoria cuando ya no se usa. Todos los idiomas también proporcionan operaciones aritméticas integradas y muchos proporcionan operaciones incorporadas para formatear texto. Un medio de abstracción es subrutinas, casi todos los lenguajes proporcionan esto, pero algunos proporcionan otros métodos de abstracción, como la programación orientada a objetos o funciones de orden superior. Esto facilita la reutilización de su código, como el ejemplo “encontrar un artículo en la tienda”.

Hay una parte más crítica de cualquier lenguaje de programación que a menudo se pasa por alto. Eso es un “medio de combinación”. a menudo se pasa por alto porque la mayoría de los idiomas proporcionan muy pocos de estos, y por lo general no es necesario. Estos están relacionados con los medios de abstracción que vimos anteriormente que ayudan al programador a separar partes de su programa, excepto que un medio de combinación permite al programador usar diferentes partes de su programa en conjunto. Por ejemplo, pueden “recoger leche” y luego “recoger huevos”. En este caso, “entonces” es un medio de combinación. Así es “if … then .. else .. end if” en nuestro ejemplo anterior. Ambos de estos nos permiten combinar declaraciones en declaraciones más grandes. También podemos combinar expresiones juntas. cost_of ($ eggs) es una expresión, podemos combinarla con cost_of ($ milk) usando “+”. Esto puede ser engañoso porque la adición está incorporada. Lo que estoy señalando en este caso es la capacidad de escribir expresiones compuestas de otras expresiones. (Si alguien que está familiarizado con la programación está leyendo y piensa que estoy siendo demasiado específico aquí, piense en el símbolo “|” en el shell bash. Es un medio de combinación que es muy diferente de “;” y es enormemente poderoso. )

Estas son las tres características principales de un lenguaje de programación:

  • Sus operaciones incorporadas,
  • Sus medios de abstracción y
  • Sus medios de combinación.

Y cuando se utiliza un idioma, hay otras cosas importantes a tener en cuenta:

  • Las herramientas del lenguaje (compiladores, depuradores, etc.): ¿existen y qué tan buenas son?
  • La capacidad del lenguaje para ayudar a los usuarios a detectar y encontrar errores.
  • Las bibliotecas del idioma: alguien ya ha escrito algún código que necesita, lo que lo ayuda a realizar su trabajo antes.
  • La comunidad y el apoyo del idioma: ¿Es amigable la comunidad? ¿El soporte comercial está disponible?
  • El soporte de la plataforma del idioma, ¿funciona en mi computadora?

Finalmente, puede leer más sobre “medios de abstracción” y “medios de combinación” en Estructura e interpretación de programas de computadora. Bienvenido al sitio web de SICP