Fundamentos: Los lenguajes de programación

Ahora que sabemos qué es un programa, podemos decir que la programación es el proceso de construir programas. Para escribir programas, necesitamos conocer la lista de las posibles instrucciones que debemos proporcionar a la computadora, y cómo combinarlas para lograr los resultados deseados.

De acuerdo con el primer párrafo, para confeccionar programas, debemos escribir una secuencia de instrucciones que puedan ser entendidas por la computadora, pero como vimos anteriormente, hasta las computadoras más modernas trabajan con el sistema binario, por lo que, para programarlas, deberíamos proporcionarles secuencias de unos y ceros formando las instrucciones de nuestro programa. Si bien el sistema binario es muy simple, para un ser humano, resultaría imposible recordar las combinaciones de unos y de ceros que forman cada una de las instrucciones. Para solucionar este problema, existen los lenguajes de programación, una forma más sencilla y legible de representar las instrucciones.

Sin entrar en detalles formales, podemos decir que un lenguaje de programación es un conjunto de reglas que determinan, de forma clara, precisa y sin ambigüedades, la forma en que se le imparten las instrucciones a una computadora para construir un programa. Estas reglas se dividen en reglas sintácticas y reglas semánticas. Las reglas sintácticas especifican cuáles son los caracteres válidos del lenguaje y cómo se pueden agrupar en palabras también válidas. Las reglas semánticas determinan cuál es el significado de las palabras, es decir, qué se espera que la computadora haga cuando recibe una palabra o una instrucción.

ARQUITECTURAS CISC Y ARQUITECTURAS RISC

El conjunto de instrucciones que puede entender una computadora depende de su arquitectura (por ejemplo, un procesador Intel tiene un conjunto de instrucciones diferente del de un procesador Motorola). La cantidad de instrucciones permiten clasificar a los procesadores en dos grandes grupos: CISC (Complex Instruction Set Computer, computadora con conjunto de instrucciones complejo) y RISC (Reduced Instruction Set Computer, computadora con conjunto de instrucciones  reducido).

Los lenguajes de programación fueron creados para facilitar la escritura de programas, proveyendo una abstracción de las instrucciones reales de la computadora (formadas por unos y ceros) y reemplazándolas por palabras que fueran más fáciles de recordar por las personas. Según el nivel de abstracción que proveen, los lenguajes de programación se clasifican en tres niveles. Cuanto más alto sea el nivel, más cercanas al lenguaje humano serán sus instrucciones y, generalmente, más poderosas, ya que cada instrucción del lenguaje puede representar operaciones complejas formadas por muchas instrucciones de la máquina.

TIPOS DE LENGUAJES

BAJO NIVEL: Las instrucciones del lenguaje están muy relacionadas con las instrucciones de la computadora, por lo tanto, el programador debe tener un buen conocimiento del funcionamiento del equipo. Al programar directamente (o casi) con instrucciones de la máquina, se obtienen resultados eficientes y se puede lograr cualquier cosa que haga la computadora, aunque con un esfuerzo más grande que con otros niveles de abstracción. Como lenguaje de bajo nivel, podemos mencionar el Assembler.

MEDIO NIVEL: Si bien algunos autores ignoran este nivel, existe un grupo de lenguajes con una abstracción un poco más alta que los de bajo nivel, pero aún bastante cercana al hardware. Su sintaxis es más sencilla que la de los lenguajes de bajo nivel, pero permiten escribir programas cercanos al lenguaje de la computadora. Un ejemplo típico de lenguaje de nivel medio es el lenguaje C.

ALTO NIVEL:  Este lenguaje está formado por palabras comunes en algún idioma (como por ejemplo el inglés), por lo que resultan fáciles de recordar y de interpretar. Generalmente, son lenguajes más poderosos en cuanto a expresividad que los de bajo nivel, pero puede ocurrir también que resulte difícil implementar programas que tengan que hacer un uso muy específico del hardware. Como ejemplo de lenguajes de alto nivel, podemos mencionar a C# o Java.

Es muy importante tener en cuenta que, aunque los lenguajes de más alto nivel puedan parecerse al lenguaje natural de los seres humanos, deberán ser más estrictos y limitados, ya que es necesario que permitan definir las instrucciones de una forma entendible y sin ningún tipo de ambigüedad.

LOS LENGUAJES EN LA ACTUALIDAD

A lo largo del tiempo, los lenguajes han evolucionado y se adaptaron a las necesidades y a las posibilidades computacionales de cada momento. Por eso, actualmente disponemos de una gran cantidad de lenguajes de programación entre los cuales elegir a la hora de comenzar un desarrollo o de aprender una nueva tecnología.


Para tomar una buena decisión y elegir el lenguaje que más nos conviene, es importante conocer sus características, sus capacidades y debilidades. Además, un aspecto fundamental para tener en cuenta es el paradigma o enfoque del lenguaje, es decir, de qué forma hay que pensar y escribir el programa para resolver un problema. Los paradigmas más conocidos son el imperativo, el declarativo y el orientado a objetos. Mediante el paradigma imperativo, debemos indicar explícitamente los pasos por seguir para resolver el problema, es decir, debemos indicar el cómo. Por otro lado, el paradigma declarativo permite escribir el programa describiendo las características del problema, es decir, especificando el qué. Por último, el paradigma orientado a objetos permite modelar y escribir los programas a partir de la abstracción de los objetos reales que forman parte del dominio del problema. Actualmente, el paradigma declarativo es usado en el ambiente académico y con fines de investigación, mientras que, en ambientes productivos y de negocios, se utilizan los lenguajes imperativos y, en mayor medida, los orientados a objetos.

QUÉ ES EL ANÁLISIS LÉXICO?

La compilación de un programa es una tarea bastante compleja, que involucra una serie de pasos conducentes a la generación del código de máquina. El primer paso se denomina análisis léxico. Consiste en leer el texto del programa (normalmente almacenado en uno o en varios archivos) y aplicar ciertas reglas para identificar las palabras clave y las expresiones válidas del lenguaje de programación. Durante el análisis léxico, ya pueden identificarse algunos errores básicos, frecuentes en la mayoría de los programas, como por ejemplo, los identificadores mal formados.