El abc de los lenguajes de programación.

Recapitulemos: como especie, llevamos entre 200,000 y 300,000 años en este planeta. La escritura —esa tecnología que revolucionó nuestra capacidad de preservar nuestro conocimiento— tiene apenas 6,000 años. La imprenta de tipos móviles metálicos se inventó en Europa hace 586 años (1440 e.c.) aunque los chinos se adelantaron 400 años antes con su artificio de tipos móviles de cerámica (1040 e.c.). El email lleva 54 años con nosotros (desde 1971), la mensajería instantánea unos 30 años (desde 1996), específicamente WhatsApp cumplió 16 años, y lo más reciente: la IA generativa accesible para todos apareció hace apenas 2 años (Chat GPT en noviembre de 2022, aunque los modelos de lenguaje existen desde antes).

De símbolos tallados con cuñas de hueso en tablillas de arcilla a emojis intangibles en un plano de luz, de cartas a tweets, siempre hemos necesitado formas de comunicarnos que se adapten al medio. Y cuando ese medio es una máquina, nacen los lenguajes de programación.

Del lenguaje humano al lenguaje máquina.

Los lenguajes de programación son, esencialmente, puentes de comunicación. Mientras que tú y yo nos entendemos con español, inglés o mandarín (lo que llamaremos “lenguaje natural”, para no meterme en un berenjenal filosófico, semiótico o lingüístico), las computadoras operan con electricidad: encendido/apagado, 1 y 0. Los lenguajes de programación son el sistema de traducción entre nuestras intenciones humanas y las instrucciones que una máquina puede ejecutar.

Y como todo sistema de traducción, hay algunos que se parecen más al original (nuestra forma de pensar) y otros que se parecen más al destino (el código binario que entiende el procesador). Esto nos lleva a una clasificación fundamental:

🔧 Lenguajes de bajo nivel: conversando íntimamente con el hardware

Imagina que le das instrucciones a alguien para hacer un sándwich. Un lenguaje de bajo nivel sería decirle con lujo de detalle cada instrucción, especificando hasta el mas pequeño aspecto: “mueve tu brazo derecho 30 cm hacia adelante, cierra los dedos índice y pulgar con 2 newtons de fuerza, levanta 15 cm…” Es tedioso, pero a cambio tienes control absoluto de cada movimiento.

Estos lenguajes están “cerca de los fierros” (del hardware) y se caracterizan por:

  • Ser Procedurales: Las instrucciones se ejecutan una tras otra, como una receta de cocina.
  • Estrictamente tipados: Como usuario debes declarar en el programa exactamente qué tipo de dato usarás. Es como si tuvieras que etiquetar cada ingrediente: “esto es un número entero”, “esto es texto”, “esto es un decimal” manteniendo la analogía de la receta de cocina.
  • Compilados: Antes de ejecutarse, todo tu código se revisa y traduce a lenguaje máquina (ceros y unos) creando un archivo ejecutable. Piensa en ello como traducir un libro completo antes de leerlo —si hay un error, te enteras antes de empezar.
  • Gestión explícita de memoria: Tú decides dónde se guarda cada dato y cuándo liberarlo. Es como administrar manualmente cada cajón de tu escritorio en lugar de tener un asistente que lo organice por ti.
  • Ejemplos: Assembly, C, C++, Rust.

🎨 Lenguajes de alto nivel: hablando en términos humanos

Sígueme con la analogía del sándwich: Aquí simplemente le dices al otro “prepara un sándwich de jamón” y confías en que quien te escucha sabe todos los pasos intermedios.

Estos lenguajes priorizan la legibilidad y productividad:

  • Orientados a objetos: Puedes crear “entidades” que combinan datos y acciones. Es como tener bloques de LEGO prediseñados en lugar de átomos individuales.
  • Tipado dinámico: El programa deduce qué tipo de dato es cada cosa según el contexto. Menos etiquetas manuales, más flexibilidad (aunque a veces menos seguridad).
  • Interpretados (con matices): El código se ejecuta directamente, línea por línea, como leer un libro en voz alta mientras lo traduces. No hay paso previo de compilación. Nota: Lenguajes como Java y C# compilan a un formato intermedio (bytecode) antes de ejecutarse, son un punto medio.
  • Gestión automática de memoria: El lenguaje se encarga de administrar el espacio de almacenamiento. Tú te enfocas en qué quieres hacer, no en cómo administrar recursos.
  • Ejemplos: Python, JavaScript, Ruby, Java* (*compilado a bytecode)

Entonces ¿Cuál es mejor?

Respuestá corta: Depende… Repsuesta un poco más elaborada: ¿Estás diseñando el sistema de control de un marcapasos donde cada milisegundo y cada byte importan? Necesitas bajo nivel. ¿Quieres automatizar la generación de reportes semanales en tu oficina? Alto nivel será tu aliado.

La clasificación “alto” o “bajo” nivel no es un ranking de calidad, más bien es una descripción de proximidad: ¿qué tan cerca estás del pensamiento humano abstracto en contraste con la infraestructura de hardware, “los fierros”?

En programación, como en la vida misma, el contexto es rey. No se trata de qué lenguaje está de moda o cuál tiene la curva de aprendizaje más suave, sino de elegir la herramienta adecuada para el problema que quieres resolver ¿Es acaso el martillo mejor que el desarmador? Eso dependerá que pretendes hacer con ellos.



Deja un comentario