Saltar a contenido

1. ¿Qué es programar? Java en el mundo real

1.1 Concepto de programa, algoritmo e instrucción

Imagina que le explicas a tu compañero de piso, paso a paso y sin dar nada por supuesto, cómo hacer una tortilla de patatas: "1. Pela las patatas. 2. Córtalas en láminas finas. 3. Fríelas a fuego medio 15 minutos. 4. Bate los huevos. 5. Mezcla todo. 6. Cuaja la mezcla en la sartén 3 minutos por cada lado."

Eso, sin saberlo, es un algoritmo: una secuencia ordenada y finita de pasos que resuelve un problema concreto. Cada paso individual ("pela las patatas") es una instrucción. Y cuando escribes esos pasos en un lenguaje que un ordenador puede entender y ejecutar, tienes un programa.

flowchart LR
    A["Problema real\n(tengo hambre)"] --> B["Algoritmo\n(receta paso a paso)"]
    B --> C["Instrucciones\n(escritas en un lenguaje\nde programación)"]
    C --> D["Programa\n(conjunto de instrucciones\nejecutables)"]
    D --> E["Ejecución\n(el ordenador 'cocina'\ny resuelve el problema)"]

    style A fill:#fff3e0,stroke:#e65100
    style E fill:#e8f5e9,stroke:#2e7d32

💡 Idea clave: un ordenador es tremendamente potente pero absurdamente literal. No "sobreentiende" nada. Si tu algoritmo dice "fríe las patatas" pero no especifica cuándo parar, un ordenador las freiría para siempre. Programar es, sobre todo, pensar con precisión.

1.2 Historia y filosofía de Java: Write Once, Run Anywhere

A mediados de los 90, Sun Microsystems (empresa que después compró Oracle) se enfrentaba a un problema muy real: cada fabricante de hardware tenía su propio procesador, y un mismo programa en C o C++ había que recompilarlo de forma distinta para cada máquina. Escribir software portable era carísimo.

La solución de Java fue tan simple como brillante: en lugar de compilar directamente al lenguaje nativo de cada procesador, Java compila a un lenguaje intermedio (bytecode) que puede ejecutar cualquier máquina que tenga instalado un "traductor universal" — la JVM. De ahí nace el lema histórico de Java: Write Once, Run Anywhere ("escríbelo una vez, ejecútalo en cualquier sitio").

🌍 Analogía: imagina un intérprete de la ONU. Un diplomático da su discurso en español (tu código Java), pero ese discurso se traduce primero a un idioma neutro y estructurado (el bytecode), y cada país tiene su propio intérprete local (la JVM de Windows, Linux o macOS) que lo traduce a su idioma nativo sobre la marcha. Tú solo escribes el discurso una vez.

Tres décadas después, esa filosofía sigue intacta, y es una de las razones por las que Java sigue siendo uno de los lenguajes más usados en banca, seguros, telecomunicaciones, Android y sistemas empresariales a gran escala.

1.3 La JVM: compilación a bytecode y ejecución multiplataforma

El ciclo de vida de un programa Java tiene dos fases bien diferenciadas:

flowchart TD
    A["Main.java\n(código fuente,\nlegible por humanos)"] -->|"compilador javac"| B["Main.class\n(bytecode,\nno legible directamente)"]
    B --> C{"¿En qué sistema\noperativo estoy?"}
    C -->|Windows| D["JVM para Windows"]
    C -->|Linux| E["JVM para Linux"]
    C -->|macOS| F["JVM para macOS"]
    D --> G["Programa ejecutándose\n(código máquina nativo)"]
    E --> G
    F --> G

    style A fill:#e3f2fd,stroke:#1565c0
    style B fill:#fff3e0,stroke:#e65100
    style G fill:#e8f5e9,stroke:#2e7d32

Paso 1 — Compilación (javac): tu fichero .java se traduce a un fichero .class con bytecode. Este bytecode no es código máquina (no lo entiende directamente tu procesador), es un formato intermedio, denso y optimizado, pensado para que la JVM lo interprete rápido.

Paso 2 — Ejecución (JVM): la Java Virtual Machine lee ese bytecode y lo traduce a instrucciones que tu procesador sí entiende. Además, la JVM moderna usa un compilador JIT (Just-In-Time) que detecta qué partes del código se ejecutan muchísimas veces y las optimiza sobre la marcha, acercando el rendimiento al de un lenguaje compilado nativamente como C++.

El mismo fichero Main.class funciona igual en un portátil con Windows, un servidor Linux en la nube o un Mac, siempre que cada uno tenga su JVM correspondiente instalada. Eso es portabilidad real, no teórica.

1.4 Java 25 LTS en el mercado laboral: por qué este lenguaje

No todas las versiones de Java se crean igual. Cada pocos años, Oracle publica una versión LTS (Long Term Support) que recibe actualizaciones de seguridad y mantenimiento durante muchos años, frente a las versiones intermedias, que quedan obsoletas en solo 6 meses.

Versión Tipo Relevancia
Java 8 LTS Durante años el estándar de facto en la empresa. Aún vive en sistemas heredados (legacy)
Java 11 LTS Primera gran limpieza del lenguaje tras Java 8
Java 17 LTS Introduce records, sealed classes y pattern matching básico como estables
Java 21 LTS Virtual threads, pattern matching avanzado, sequenced collections
Java 25 LTS Versión que usaremos este curso. Soporte oficial hasta 2030

En este módulo trabajamos con Java 25 LTS por dos motivos muy concretos:

  1. Estabilidad a largo plazo: al ser LTS, es la versión que las empresas adoptan de verdad en producción, no un experimento de laboratorio.
  2. Preparación real para el mercado laboral: incorpora de forma ya estable características modernas (pattern matching completo, records, sealed classes, unnamed classes) que verás en ofertas de empleo de aquí a varios años.

📌 Aprender Java "a la antigua" (solo con clases, for clásicos y sin lambdas ni streams) hoy en día sería como aprender a conducir solo con coches de marchas manuales sin GPS: técnicamente funciona, pero no es lo que te vas a encontrar en tu primer trabajo.

1.5 Diferencia entre JDK, JRE y JVM

Este es uno de los conceptos que más se confunden al principio, así que vamos a desmontarlo con una analogía de cocina profesional.

flowchart TB
    subgraph JDK["🔧 JDK 25 — Java Development Kit (la cocina profesional completa)"]
        direction TB
        subgraph JRE["🍳 JRE — Java Runtime Environment (el horno + los ingredientes básicos)"]
            JVM["🔥 JVM — Java Virtual Machine\n(la fuente de calor que realmente cocina)"]
        end
        HERR["🔪 Herramientas de desarrollo:\njavac (compilador), javadoc, jar, jshell..."]
    end
Componente Qué es ¿Qué incluye? ¿Quién lo necesita?
JVM (Java Virtual Machine) El motor que ejecuta el bytecode Solo el intérprete/ejecutor Cualquiera que quiera ejecutar un programa Java
JRE (Java Runtime Environment) El entorno mínimo para ejecutar programas Java JVM + librerías estándar en tiempo de ejecución Un usuario final que solo quiere usar una aplicación Java
JDK (Java Development Kit) El kit completo para desarrollar software Java JRE completo + compilador javac + herramientas (javadoc, jar, jshell, depurador...) Tú, como programador/a

⚠️ Trampa clásica de examen: si solo instalas un JRE, puedes ejecutar programas .jar ya compilados, pero no puedes compilar tu propio código, porque el JRE no trae javac. En este curso instalaremos siempre el JDK 25 completo, nunca solo el JRE.

Desde Java 11, Oracle simplificó las distribuciones y en la práctica casi todo el mundo instala directamente el JDK (que ya incluye todo lo del JRE dentro). Nosotros usaremos la distribución Adoptium Temurin 25, una build OpenJDK gratuita, de código abierto y mantenida por la Eclipse Foundation — muy usada en entornos profesionales reales.


🧠 Autoevaluación exprés — Punto 1 (haz clic para ver las preguntas) 1. ¿Cuál es la diferencia entre un algoritmo y un programa? 2. ¿Por qué Java compila a bytecode en lugar de compilar directamente a código máquina nativo? 3. Si un compañero solo ha instalado el JRE en su ordenador, ¿podrá compilar el código que tú le pases? ¿Y ejecutarlo ya compilado? 4. ¿Qué significa que una versión de Java sea "LTS" y por qué nos importa en este curso? Respuestas orientativas: (1) el algoritmo es la idea abstracta de los pasos, el programa es esa idea ya escrita en un lenguaje ejecutable. (2) Para lograr portabilidad: el mismo bytecode se ejecuta en cualquier JVM, sea cual sea el sistema operativo. (3) No podrá compilar (falta javac), pero sí podrá ejecutar un .class o .jar ya compilado. (4) Que recibe soporte y mantenimiento oficial durante años; nos importa porque es la versión real que usan las empresas.