# Fundamentos de programación/Lenguajes de programación

* Lección 3
* Lenguajes de programación
Existen gran cantidad de tipos de computadores y cada uno de ellos es capaz de recibir un conjunto de instrucciones y ejecutarlo para realizar tareas útiles. Sin embargo, el conjunto de instrucciones que cada tipo de computador es capaz de comprender es diferente y normalmente consiste únicamente de secuencias de números en código binario (únicamente con los valores 1 y 0) que se almacenan directamente en los circuitos de la máquina para su posterior ejecución. Estos conjuntos de instrucciones se llaman «lenguajes máquina» y son diferente en diferentes tipos de computadores porque se encuentran estrechamente relacionados al diseño de los circuitos que forman la máquina.
En los primeros días de la informática, los programas se escribían directamente en estos lenguajes, lo que resultaba en programas extremadamente difíciles de escribir y modificar y prácticamente imposibles de entender, incluso para la misma persona que los había creado. Para resolver esos problemas se crearon primero los lenguajes ensambladores y posteriormente los lenguajes de alto nivel. Estos lenguajes se llaman de alto nivel porque permiten expresar los algoritmos en términos más cercanos a la forma en que se conceptualizan en la cabeza de los programadores e incluyen estructuras como los tipos de datos, estructuras de control, declaraciones y abstracciones entre otras.
Actualmente existe una gran cantidad de lenguajes de programación de alto nivel y nuevos lenguajes se crean continuamente. Todos son capaces de representar algoritmos para resolver problemas pero varían en múltiples aspectos. Algunos son más fáciles de aprender y usar por programadores novatos, otros están orientados a propósitos específicos y facilitan la resolución de problemas en su área de enfoque y otros ofrecen un mayor poder de abstracción a cambio de una reducción en la eficiencia al ejecutar los programas. El lenguaje a utilizar dependerá de esos factores así como de otros, que incluyen la experiencia del programador y las restricciones del ambiente en que se crean los programas. Por ejemplo muchas empresas especifican que todos los programas que desarrollan sus empleados deben escribirse en un lenguaje de programación determinado.
A pesar de sus diferencias, todos los lenguajes son técnicamente equivalentes y los conceptos fundamentales que se estudian en este proyecto de aprendizaje aplican por igual a todos ellos.

### Procesadores de lenguajes de programación

La expresión de un algoritmo en un lenguaje de programación específico se denomina «código fuente» y la versión de ese mismo programa en un lenguaje máquina que el computador puede ejecutar se llama «código ejecutable», «código máquina» o «código objeto». Para transformar el código fuente en código objeto se requieren múltiples herramientas como los «editores de texto» que permiten ingresar el código fuente en el computador, los «compiladores» que traducen el código fuente y almacenan el resultado en un archivo que contiene el código máquina que la computadora puede comprender y los «interpretes» que traducen el código fuente en código objeto durante su ejecución, sin almacenar el código máquina en un archivo. Estas herramientas pueden ser individuales o estar integradas en «entornos de desarrollo».

### Traducción al lenguaje máquina

El proceso de transformación de un programa en código fuente en programa ejecutable se realiza en múltiples etapas. La primera de ellas es la «compilación». Luego se realiza el «enlazado» de los diferentes módulos y finalmente se carga el programa en memoria para iniciar su ejecución.
La compilación es la parte más compleja del proceso y consiste de cuatro actividades: el análisis léxico, el análisis sintáctico, el análisis semántico y la generación de código. El análisis léxico recorre el código fuente e identifica los componentes que forman el programa de forma similar a como los humanos identificamos las palabras de un texto durante la lectura. El análisis sintáctico agrupa los componentes del programa en estructuras de nivel superior que poseen un significado en conjunto, equivalente al proceso de identificar las oraciones en un texto. El análisis semántico identifica el significado de las estructuras, verifica y reporta posibles errores y le organiza la información sobre el programa. Usando esa información el compilador procede con la última actividad que consiste en la generación y almacenamiento del código fuente (o su ejecución en el caso de los intérpretes).
Cuando los programas son grandes se suelen organizar en diferentes archivos de código fuente y estos se compilan por separado. La etapa de enlazado se encarga de combinar los archivos de código máquina generados por el compilador, también llamados módulos, de forma que se integren en un programa completo. También realiza los ajustes necesarios para que el programa pueda encontrar los recursos del computador que necesitará para realizar sus tareas, como los dispositivos de entrada y salida (monitores, teclados, ratones, plantillas táctiles, etc.) o los archivos de datos que debe leer o en los que debe escribir.
Por último, cuando llega el momento de ejecutar el programa, el proceso de carga toma el programa del almacenamiento permanente (el disco duro del computador o un dispositivo de almacenamiento removible como un disco compacto), lo transfiere a la memoria de principal y le asigna el almacenamiento necesario en memoria para su ejecución. Una vez completadas estas tareas, la unidad central de proceso del computador puede empezar a leer y ejecutar las instrucciones del programa.

## Resumen de la lección

* El conjunto de instrucciones que cada tipo de computador puede comprender se llama lenguaje máquina.
* Los lenguajes de alto nivel facilitan la escritura, comprensión y modificación de los programas.
* Todos los lenguajes de alto nivel son equivalentes ya que todos capaces de expresar las tareas que deben ejecutar los ordenadores.
* Un programa expresado en un lenguaje de alto nivel se llama «código fuente» y al estar expresado en lenguaje máquina se le llama «código ejecutable».
* Los editores permiten ingresar un programa en el computador y almacenarlo en un archivo código fuente.
* Los compiladores transforman un programa en código fuente en un programa en código ejecutable.
* Los enlazadores combinan diferentes módulos de un programa y le indican cómo acceder a los recursos del computador.
* El proceso de carga transfieren los programas del almacenamiento permanente del computador a la memoria principal y los prepara para su ejecución.

## Términos clave

* Código fuente
* Código objeto
* Compilador
* Editor
* Enlazador
* Intérprete
* Lenguaje de alto nivel
* Lenguaje máquina
* Lenguaje de programación

## Lecturas adicionales

* Historia y evolución de los lenguajes de programación

## Bibliografía

* 1 2 3 4 Watt, David Anthony (1993). Programming Language Processors (en inglés) (1.ª edición). Cambridge, Reino Unido: Prentice Hall. p. 452. ISBN 0-13-720129-X.
* 1 2 Deitel, H. M.; Deitel, P. J. (1995). C How to Programm [Cómo programar en C/C++] (2.ª edición). México: Pearson Educación. p. 927. ISBN 0-13-226119-7.
* 1 2 Scott, Michael L. (2000). Programming Language Pragmatics (en inglés) (1.ª edición). San Francisco, CA, Estados Unidos: Morgan Kaufmann Publishers. p. 856. ISBN 1-55860-442-1.
* ↑ Joyanes Aguilar, Luis (2013). Fundamentos generales de programación (1.ª edición). Ciudad de México, México: McGraw Hill. p. 368. ISBN 978-607-15-0818-8.
* 1 2 3 Brookshear, J. Glenn (2012). Computer Science: An overview [Introducción a la computación] (11.ª edición). Madrid, España: Pearson Educación, S. A. p. 704. ISBN 978-84-78-29139-7.
* ↑ Aho, Alfred V.; Sethi, Ravi; Ullman, Jeffrey (1998). Compilers: Principles, Techniques and Tools [Compiladores: Principios, Técnicas y Herramientas] (1.ª edición). México: Addison Wesley Longman. p. 820. ISBN 968-444-333-1.
* Proyecto: Fundamentos de programación
* Anterior: Evaluación de la lección 2 — Lenguajes de programación — Siguiente: Evaluación de la lección 3