El lenguaje de programación sirve para escribir código orientado a resolver algún problema o necesidad. Cada lenguaje de programación se define a partir de un conjunto de símbolos básicos, llamado alfabeto; un conjunto de reglas, llamado sintaxis, que definen la forma de manipularlos o combinarlos para representar instrucciones; y las reglas que especifican los efectos de dichas instrucciones cuando son ejecutadas por la computadora, conocidas como semántica. De esta manera se puede decir que los elementos que conforman un lenguaje de programación son:
𝐿𝑒𝑛𝑔𝑢𝑎𝑗𝑒 𝑑𝑒 𝑝𝑟𝑜𝑔𝑟𝑎𝑚𝑎𝑐𝑖ó𝑛 = 𝑎𝑙𝑓𝑎𝑏𝑒𝑡𝑜 + 𝑠𝑖𝑛𝑡𝑎𝑥𝑖𝑠 + 𝑠𝑒𝑚á𝑛𝑡𝑖𝑐𝑎
Los lenguajes de programación se clasifican en lenguajes de bajo nivel y lenguajes de alto nivel dependiendo de su legibilidad para el ser humano. Los primeros se caracterizan porque sus instrucciones se parecen más a las acciones elementales que ejecuta una computadora, como son: sumar, restar, guardar en memoria, etcétera. En cambio, las instrucciones de los lenguajes de alto nivel son más parecidas a un lenguaje humano, por lo regular en idioma inglés.
Los programas escritos en bajo nivel describen a detalle lo que sucede a nivel de hardware, mientras que los programas escritos en un lenguaje de alto nivel lo ocultan, teniendo como ventaja que son más fáciles de entender para las personas.
Estructura de un lenguaje
Como en muchos otros lenguajes, una función es un código de programación que tiene una tarea específica y forma parte del programa original. Es una secuencia de instrucciones precisas, para realizar una tarea en específico.
Una función está definida por los siguientes elementos:
• Cabecera de la función. Está integrada por un tipo de dato, un nombre de la función y una la lista de parámetros.
• Código de programación. Es único para cada función. Se incluye el valor devuelto por la función.
Los aspectos más importantes en el diseño de una función son:
• Tipo de resultado. Se refiere al tipo de dato que devuelve la función.
• Lista de parámetros.
• Cuerpo de una función. Se encierra entre llaves {}.
• Paso de parámetros.
• Declaración de variables de forma local. Dentro de una función pueden declararse variables de distintos tipos, pero estas perduran únicamente dentro la función.
• Valor devuelto por la función.
Una función devuelve un único valor, el valor que devuelve puede ser de cualquier tipo de datos reconocido. El nombre de una función comienza con una letra o un subrayado (_) y puede contener las letras y subrayados que se desee.
A continuación, se muestra la estructura general de una función en lenguaje programación C:

Tipos de datos
Los tipos de datos que suelen utilizarse en la mayoría de los lenguajes de programación son:
• Cadena (texto).
• Entero (número entero).
• Decimal (número con punto decimal).
Evolución de los lenguajes de programación
Con las primeras computadoras surgió el primer lenguaje de programación que fue precisamente el lenguaje de máquina, el cual es considerado el lenguaje de primera generación. Las instrucciones en lenguaje de máquina dependían de las características de cada equipo, por lo que dada la dificultad
de desarrollar programas en unos y ceros, los investigadores de la época desarrollaron el lenguaje ensamblador, cuyo conjunto de instrucciones consta de palabras nemotécnicas que corresponden a las operaciones básicas que una computadora puede ejecutar.
Para ilustrar esto se revisará la siguiente instrucción:
Mueve el contenido del registro 8 al contenido del registro 10
En lenguaje de máquina, ésta se podría representar como: 0010 0000 1000 0100
Lo anterior es ilegible para el ser humano, en cambio en lenguaje ensamblador esta instrucción se puede representar de la siguiente forma: MOV R8, R10
El código anterior continúa estando en clave, pero es definitivamente más amigable que las cadenas de ceros y unos.
Para traducir de lenguaje ensamblador a lenguaje de máquina, se desarrollaron programas llamados ensambladores (en inglés, assemblers).
Este lenguaje fue considerado de segunda generación. Posteriormente, en la década de los 50´s aparecieron los primeros lenguajes de alto nivel, cuyas instrucciones son más parecidas al idioma inglés y, por lo tanto, más fácil de utilizar para los programadores, además de que son independientes de la arquitectura de las computadoras. Algunos ejemplos son: FORTRAN y COBOL (que son los primeros lenguajes que aparecieron y en sus inicios se utilizaron para aplicaciones científicas), C, Pascal, Ada, Lisp y Prolog (utilizados principalmente en inteligencia artificial), Java, C++, C#, entre otros.
Al igual que el lenguaje ensamblador, los programas escritos en un lenguaje de alto nivel deben ser codificados a lenguaje de máquina, así que junto con ellos se desarrollaron programas traductores, que de acuerdo con la forma en que trabajan se dividen en dos tipos: compiladores e intérpretes.
Compiladores. Traducen todo el programa escrito en un lenguaje de alto nivel, llamado programa o código fuente, generando un nuevo programa objeto que está escrito en lenguaje de máquina y a partir de este se genera un programa ejecutable, el cual puede ejecutarse cada vez que se desee sin tener
que compilar el programa fuente nuevamente. Además, como parte del proceso de traducción el compilador detecta los errores que hay en el código fuente, informándole al programador para que los corrija, pues un programa solo se compila si no tiene errores.
Intérprete. Revisa cada línea de código individualmente, la analiza y enseguida la ejecuta, sin revisar todo el código y sin generar un programa objeto, así que cada vez que se quiere ejecutar el programa se vuelve a traducir el programa fuente línea por línea.
Por lo anterior, los compiladores requieren una fase extra antes de poder generar un programa ejecutable, y aunque esto pareciera menos eficiente en cuanto a tiempo, los programas creados con compiladores se ejecutan mucho más rápido que el mismo programa ejecutado con un intérprete.
Adicionalmente, cuando un programa ya ha sido compilado puede ejecutarse nuevamente sin tener que compilarse, mientras que los programas que son interpretados, se deben volver a traducir cada vez que se ejecutan.
Conforme han ido evolucionando las computadoras también lo han hecho las estrategias para solucionar problemas, generando nuevos programas con diferentes filosofías, llamadas paradigmas de programación.