Saltar al contenido principal

¿Cómo entiende un ordenador nuestro código?

En la unidad anterior vimos que programar consiste en dar instrucciones a un ordenador.

Pero hay una pregunta que todavía no hemos respondido:

¿Cómo puede un ordenador entender algo como print("Hola") si nosotros lo hemos escrito utilizando palabras?

La respuesta corta es que el ordenador no entiende directamente el código que escribimos.

Entre nuestro código y el ordenador existe un proceso que permite convertir nuestras instrucciones a una forma que la máquina pueda ejecutar.

Vamos a verlo paso a paso.


Personas y ordenadores no hablamos el mismo idioma

Cuando dos personas quieren comunicarse, pueden utilizar un lenguaje natural, como español, inglés, francés o japonés.

Estos lenguajes "humanos" son muy flexibles, no siempre necesitamos especificar cada cosa que decimos. Por ejemplo, si alguien nos dice:

"Pon un poco de agua en el vaso."

Probablemente entenderemos qué quiere decir.

Pero ¿cuánta agua es "un poco"?

Puede ser medio vaso, un vaso entero o simplemente unos pocos mililitros. Una persona puede utilizar el contexto para interpretar la frase. Pero un ordenador no puede hacer lo mismo de forma tan sencilla.

Si queremos que un ordenador haga algo, necesitamos darle instrucciones precisas y estructuradas.

Por eso existen los lenguajes de programación.


¿Qué es un lenguaje de programación?

Un lenguaje de programación es una forma de escribir instrucciones que permite a las personas crear programas para un ordenador.

Algunos lenguajes que quizá hayas escuchado son:

  • Python
  • Java
  • C
  • JavaScript

Cada uno tiene sus propias reglas y sintaxis.

Por ejemplo, y sin entrar en detalles, solo para que veas de manera visual. Mostrar un mensaje de "Hola" en Python se escribe:

print("Hola")

En Java se escribe:

System.out.println("Hola");

En JavaScript se escribe:

console.log("Hola");

Como ves, en otro lenguaje, la misma idea podría escribirse de una manera diferente.

Es parecido a los idiomas humanos.

Podemos expresar una misma idea en español o en inglés, pero las palabras y las reglas cambian. En español se dice "Hola", en inglés "Hello", en alemán "Hallo"...

Con los lenguajes de programación ocurre algo parecido, pero lo importante es que cualquier lenguaje de programación nos proporciona unas reglas para escribir instrucciones de forma que puedan ser procesadas por un ordenador.


La sintaxis

Las reglas que indican cómo debemos escribir correctamente un lenguaje de programación forman parte de su sintaxis.

Por ejemplo, en Python:

print("Hola")

está escrito siguiendo las reglas de Python. Más adelante aprenderemos muchas de esas reglas.

Por ahora solo necesitas saber que no podemos escribir las instrucciones de cualquier manera.

Al igual que una frase en español puede estar mal escrita, nuestro código también puede estarlo.


El ordenador no entiende Python directamente

Aquí aparece una idea muy importante.

Nosotros podremos leer:

print("Hola")

y entender que queremos mostrar el mensaje Hola.

Pero el procesador de un ordenador no ejecuta directamente una instrucción escrita de esta forma, sigue estando escrita de manera "muy humana", con palabras.

El procesador trabaja con instrucciones expresadas en un nivel mucho más cercano al funcionamiento de la máquina.

Una de las formas más básicas de representar estas instrucciones es mediante lenguaje máquina, formado por instrucciones que el procesador puede ejecutar directamente.

No necesitamos aprender ahora cómo son esas instrucciones. Quédate únicamente con esta idea:

Python está pensado para que nosotros podamos escribir programas de una forma relativamente sencilla. Pero el procesador aún no las entenderá directamente

Entonces aparece una pregunta:

¿Quién se encarga de hacer posible esa comunicación?


Una capa intermedia

Podemos imaginar el proceso de esta manera:

┌──────────────────────┐
│ PERSONA │
│ │
│ print("Hola") │
└──────────┬───────────┘

┌──────────────────────┐
│ PROCESAMIENTO DEL │
│ CÓDIGO │
└──────────┬───────────┘

┌──────────────────────┐
│ ORDENADOR │
│ │
│ Ejecuta instrucciones│
└──────────────────────┘

Necesitamos algún mecanismo que tome nuestro código y permita que el ordenador pueda ejecutarlo.

Existen diferentes formas de hacerlo.

Dos conceptos importantes son:

compilar e interpretar.


¿Qué significa compilar?

Imagina que tienes un libro escrito en japonés, pero quieres leerlo en español.

Una posibilidad sería traducir todo el libro primero.

Una vez terminada la traducción, tendrías una versión completa en español que podrías leer.

La idea de la compilación es parecida.

Un compilador es un programa que procesa nuestro código antes de ejecutar el programa y genera una versión que puede ser utilizada para su ejecución.

Por tanto, cuando hablamos de compilar, hablamos de realizar un proceso de transformación del código antes de ejecutarlo, como una traducción de código.


¿Qué significa interpretar?

Hemos visto la opción de compilar, pero existe otra manera de hacer que el procesador entienda nuestro código: interpretando.

Volvamos ahora al ejemplo del idioma.

Imagina una conferencia en la que una persona habla en japonés y otra persona hace interpretación simultánea al español.

No se traduce todo el discurso antes de empezar, como haría un compilador.

La interpretación se va realizando mientras la persona habla.

La idea de la interpretación es parecida.

Un intérprete es un programa que recibe nuestro código y se encarga de procesarlo para permitir su ejecución.

En lugar de preparar todo el programa de una vez y después ejecutarlo, tenemos un programa que interviene durante el proceso de ejecución.


Compilar o interpretar

Podemos quedarnos con una comparación sencilla:

Compilar

Primero preparamos el código y después ejecutamos el resultado.

Código

Preparación

Ejecución

Compilar es como traducir el libro entero de una sola vez y luego encuadernarlo en un nuevo libro en español. Cuando quieras leerlo, coges el libro traducido y lo lees directamente, súper rápido. Pero el proceso de traducirlo entero te toma un tiempo.

Interpretar

Un intérprete procesa nuestro código simultáneamente y permite su ejecución.

Código

Intérprete

Ejecución

Interpretar es como tener un traductor simultáneo al lado. Vas leyendo el texto y el traductor te dice al oído lo que significa justo en ese momento. Empiezas a leer y al instante sabes lo que dice. Si hay un error en la línea 5, te das cuenta al llegar ahí y te detienes.

Ninguna de las dos opciones es simplemente "mejor".

Cada enfoque tiene sus ventajas y sus inconvenientes y, en la práctica, los lenguajes y sus implementaciones pueden utilizar mecanismos bastante más complejos que esta división.

Para empezar, lo importante es entender que nuestro código necesita ser procesado antes de que el ordenador pueda ejecutar las instrucciones que contiene.


Entonces, ¿qué hace Python?

Cuando escribimos un programa en Python, normalmente guardamos nuestro código en un archivo con extensión:

.py

Por ejemplo:

mi_programa.py

Es como tener un documento Word llamado recetas.docx con el contenido de una receta escrita.

Cuando ejecutamos ese archivo .py, necesitamos tener disponible Python para poder procesar nuestro código.

Por eso, decimos que Python suele describirse como un lenguaje interpretado, porque normalmente ejecutamos nuestros programas mediante una implementación/intérprete de Python. Internamente pueden existir otros pasos que veremos más adelante.

Ese intérprete se encarga de procesar nuestro código y hacer posible su ejecución.


¿Por qué no escribimos directamente lenguaje máquina?

Podríamos preguntarnos:

Si el ordenador necesita instrucciones que pueda ejecutar, ¿por qué no escribimos directamente esas instrucciones?

Porque sería extremadamente incómodo para nosotros.

Imagina que para mostrar un mensaje tuviéramos que escribir únicamente secuencias de valores difíciles de leer:

10110010 01101001 001101...

Éste es un ejemplo meramente ilustrativo, pero no sería una forma especialmente agradable de programar.

Los lenguajes de programación nos permiten trabajar con instrucciones mucho más cercanas a la forma en la que pensamos las personas.

Por ejemplo:

print("Hola")

es muchísimo más fácil de leer y entender que una secuencia de instrucciones de máquina en lenguaje binario (ceros y unos).

Los lenguajes de programación son, por tanto, una de las muchas capas que hacen posible que podamos crear programas sin tener que trabajar constantemente con los detalles más bajos del ordenador.


💡 Curiosidad

Simplemente a modo de curiosidad, hoy podemos escribir algo tan sencillo como:

print("Hola")

y conseguir que un ordenador muestre un mensaje. Pero esto es posible gracias a muchas capas de software que normalmente no vemos.

Los primeros programadores tenían que trabajar mucho más cerca de las instrucciones que entendía directamente la máquina. Sin embargo, con el paso del tiempo aparecieron lenguajes y herramientas que hicieron que programar fuese cada vez más cómodo para las personas.

Así podemos centrarnos en qué queremos que haga nuestro programa, en lugar de tener que preocuparnos constantemente por cómo funciona físicamente el procesador.


Mini reto

Vamos a comprobar si has entendido la diferencia entre compilar e interpretar.

Parte 1 · ¿A qué se parece?

Indica si cada situación se parece más a compilar o a interpretar.

1. Traducir un libro entero antes de entregárselo al lector.

2. Traducir una conversación mientras las dos personas están hablando.

3. Preparar una receta completa antes de empezar a cocinar.

4. Tener a una persona explicándote cada paso de la receta mientras la preparas.


Parte 2 · Piensa

Imagina que alguien te pregunta:

"¿Por qué el ordenador no puede ejecutar directamente print('Hola')?"

Intenta explicárselo con tus propias palabras.

No hace falta utilizar palabras técnicas.

Si puedes explicar que nosotros escribimos código utilizando un lenguaje pensado para personas y que ese código necesita ser procesado para que el ordenador pueda ejecutarlo, has entendido la idea principal de esta unidad.


Qué debes recordar

Un lenguaje de programación nos permite escribir instrucciones para crear programas.

El ordenador no ejecuta directamente nuestro código Python tal y como lo escribimos.

Compilar significa procesar el código antes de ejecutarlo, generando un resultado preparado para su ejecución.

Interpretar implica utilizar un programa que procesa nuestro código para permitir su ejecución.

Python necesita un intérprete para ejecutar normalmente nuestros programas.

Y, sobre todo:

Nosotros escribimos código de una forma cómoda para las personas. El ordenador necesita que ese código sea procesado para poder ejecutarlo.

En la siguiente unidad conoceremos mejor a Python: qué es, por qué se creó y por qué se ha convertido en uno de los lenguajes de programación más utilizados.