Cómo funciona un programa desde el código hasta lo que aparece en la pantalla

programa

Un programador puede escribir una instrucción bastante clara para una persona:

total = precio * cantidad

La computadora, sin embargo, no toma esa línea de texto y la entiende como nosotros entendemos una frase. El procesador trabaja con instrucciones representadas de una manera mucho más cercana al hardware. Entre el código que alguien escribe y el resultado que aparece en una pantalla existe una cadena de traducciones, decisiones y componentes que normalmente permanece invisible.

Esa cadena tampoco es idéntica en todos los programas. Una aplicación escrita en C puede convertirse previamente en código ejecutable para determinada plataforma. Python suele trabajar mediante un intérprete y representaciones intermedias. JavaScript llega al navegador como código fuente y un motor se encarga de procesarlo y ejecutarlo, aplicando además técnicas modernas de optimización.

Por eso resulta más útil seguir el recorrido que memorizar una fórmula como “código → computadora → pantalla”.

El archivo que escribe el programador todavía no es la instrucción final del procesador

Cuando guardas un programa, normalmente estás almacenando código fuente.

Ese archivo está pensado para que una persona pueda leerlo, modificarlo y organizarlo. Puede contener nombres como precio, usuario, calcularTotal o enviarMensaje, además de estructuras propias del lenguaje utilizado.

La UNAM explica en sus materiales sobre lenguajes de programación que los programas escritos en lenguajes de alto nivel no son utilizados directamente por el procesador como instrucciones de máquina. Necesitan algún mecanismo que traduzca o procese ese código.

Ahí aparecen dos palabras que escucharás muchas veces al aprender programación: compilador e intérprete.

Un compilador puede tomar el código fuente y producir otra representación preparada para su posterior ejecución. En lenguajes como C o C++, una parte importante de esa transformación ocurre antes de que abras el programa terminado.

Un intérprete trabaja de otra manera: participa durante la ejecución, procesando las instrucciones mediante el entorno correspondiente. En la práctica moderna existen además soluciones híbridas y técnicas de compilación intermedia o en tiempo de ejecución, así que la frontera no siempre es tan limpia como sugieren las primeras definiciones de un curso.

El objetivo de esta diferencia no es decidir qué método es “mejor”. Sirve para entender que el archivo que escribiste necesita encontrarse con otro software capaz de darle significado dentro de una computadora concreta.

El curso de Introducción a la programación de la UNAM incluye precisamente compiladores, intérpretes, código fuente, código objeto y código ejecutable entre los conceptos básicos que preceden al desarrollo de programas.

Ejecutar un programa pone en movimiento más cosas que el código

Supongamos que escribes un pequeño programa para calcular el costo de tres cuadernos:

precio = 48

cantidad = 3

total = precio * cantidad

print(total)

Para ti, el resultado esperado es evidente: 144.

Para llegar ahí, el entorno que ejecuta el programa necesita interpretar correctamente varios elementos.

Primero debe reconocer qué escribiste

precio es un nombre elegido por el programador. 48 representa un valor numérico. El signo = tiene un significado definido por el lenguaje y * expresa una operación.

El lenguaje establece reglas sobre qué combinaciones son válidas.

Si escribes una estructura que viola su sintaxis, el proceso puede detenerse antes de producir el resultado. El compilador o intérprete no intenta adivinar libremente lo que quisiste decir; analiza el texto según reglas determinadas.

El Portal Académico del Colegio de Ciencias y Humanidades de la UNAM explica esta relación mediante tres conceptos: léxico, sintaxis y semántica. El código necesita respetar reglas formales, mientras que lograr que el programa resuelva correctamente el problema sigue dependiendo de las decisiones del programador.

Esto explica por qué un programa puede ejecutarse sin mostrar ningún error técnico y, aun así, producir un resultado equivocado.

Si escribieras total = precio + cantidad, la instrucción podría ser perfectamente válida. El problema estaría en la lógica: obtendrías 51 cuando querías calcular 144.

Después aparecen memoria, valores e instrucciones

Cuando el programa está en ejecución, necesita espacio para trabajar.

Los valores utilizados por variables, objetos y otras estructuras pueden ocupar memoria. El entorno mantiene información necesaria para saber qué parte del programa se está ejecutando, qué funciones fueron llamadas y qué resultados temporales existen.

El procesador va realizando operaciones a partir de instrucciones que finalmente llegan a un formato que su arquitectura puede ejecutar.

Aquí resulta útil recordar la diferencia entre RAM y almacenamiento. El archivo con el código puede estar guardado en una unidad SSD, pero mientras el programa está funcionando necesita utilizar memoria para trabajar con instrucciones y datos.

Ya explicamos esa diferencia en memoria RAM vs. almacenamiento. En programación, deja de ser una comparación de especificaciones y pasa a formar parte de lo que ocurre mientras el software está activo.

La CPU tampoco “ve” precio de la misma forma en que lo ves tú en el editor. Nombres cómodos, estructuras complejas y abstracciones existen para facilitar el trabajo humano. Durante el recorrido hacia el hardware, esas construcciones terminan representadas mediante datos e instrucciones que la máquina puede procesar.

Finalmente, el programa necesita enviar el resultado a algún lugar

En el ejemplo anterior utilizamos print(total).

Eso no significa que la CPU tenga una función física llamada “print” encargada de colocar 144 en la pantalla.

El lenguaje y su entorno proporcionan esa función. Por debajo pueden intervenir bibliotecas, el sistema operativo, terminales, controladores y otros componentes hasta que los caracteres terminan representados visualmente.

La documentación oficial de Python en español muestra este modelo desde una perspectiva práctica: el intérprete permite ejecutar expresiones e instrucciones y observar sus resultados, mientras muchas operaciones de mayor nivel se apoyan en funciones y bibliotecas ofrecidas por el entorno.

Una aplicación gráfica agrega todavía más pasos.

En lugar de imprimir 144 en una terminal, podría crear una ventana, colocar un texto dentro de un componente, dibujar botones y reaccionar cuando haces clic. El programa describe qué debería ocurrir; otras capas del sistema colaboran para convertir esas decisiones en píxeles visibles.

En una página web, el recorrido se reparte entre servidor y navegador

Un sitio web vuelve la historia más interesante porque parte del programa puede ejecutarse lejos de tu computadora.

Abres una página. El navegador solicita contenido a un servidor. Ese servidor puede ejecutar código para consultar una base de datos, comprobar una sesión o preparar información antes de responder.

Después llegan al navegador varios recursos.

HTML describe la estructura del contenido. CSS participa en su presentación visual. JavaScript puede agregar comportamiento, responder a eventos y modificar lo que aparece mientras usas la página.

MDN explica en cómo los navegadores cargan los sitios web que el navegador recibe archivos y recursos, los procesa y los combina para producir finalmente aquello que vemos e interactuamos en pantalla.

Pensemos en un botón que dice Mostrar resultado.

El HTML puede definir que existe el botón. CSS determina aspectos como tamaño, tipografía o espacio alrededor. JavaScript puede asociar una acción al clic.

Cuando tocas el botón, el navegador detecta el evento y el código correspondiente se ejecuta.

La guía de MDN sobre qué es JavaScript explica que el navegador ofrece un entorno de ejecución donde JavaScript puede modificar dinámicamente HTML y CSS, alterando así la interfaz que ve el usuario.

El código podría tomar dos números, sumarlos y cambiar el contenido de un elemento de la página.

No sería necesario recargar todo el sitio para que el texto visible cambie.

En una aplicación más compleja, el clic puede generar una solicitud a un servidor. El servidor procesa información, consulta una base de datos y devuelve una respuesta. JavaScript recibe esos datos y actualiza una parte de la interfaz.

El resultado visible que parece instantáneo quizá haya recorrido Internet dos veces.

Eso conecta esta categoría con algo que ya vimos en cómo funciona Internet. Un programa moderno rara vez vive aislado. Puede depender del navegador, del sistema operativo, de servidores, redes, bases de datos y servicios externos.

Dos programas pueden mostrar la misma pantalla y funcionar de maneras completamente distintas

Imagina dos calculadoras que se ven iguales.

En la primera, toda la operación ocurre en el navegador. Escribes dos números, JavaScript los suma y el resultado aparece inmediatamente.

En la segunda, los números viajan hasta un servidor. Allí otro programa realiza el cálculo, guarda un registro y devuelve el resultado al navegador.

Visualmente, el usuario podría no notar ninguna diferencia.

Por dentro, son arquitecturas distintas.

Lo mismo ocurre con aplicaciones instaladas. Algunas contienen gran parte de su lógica en el propio dispositivo; otras dependen constantemente de servicios remotos. Un juego puede realizar millones de cálculos localmente y utilizar Internet solo para funciones específicas. Una plataforma de correo combina interfaz local, servidores, almacenamiento, sincronización y redes.

Esta es una de las razones por las que mirar una pantalla revela muy poco sobre la complejidad del programa.

Cuando aparece un botón, estás viendo la última capa de muchas decisiones.

Debajo puede haber código fuente que alguien escribió, herramientas que lo transformaron, un entorno que lo ejecuta, memoria que mantiene datos temporales, un procesador realizando instrucciones, un sistema operativo administrando recursos y una interfaz traduciendo resultados a elementos que puedes leer o tocar.

En la Web todavía pueden sumarse navegador, red y servidores.

La próxima vez que cambie un número, aparezca una ventana o un botón responda a un clic, la pantalla seguirá mostrando algo sencillo.

El recorrido que produjo ese resultado ya no lo será tanto.

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Scroll al inicio