Ir al contenido

L1: Entorno Agnóstico y Hola Mundo

Si alguna vez has intentado ejecutar un programa .exe (de Windows) en una Mac, o una aplicación de iOS en un teléfono Android, te habrás dado cuenta de que simplemente no funcionan.

Esto sucede porque históricamente, los lenguajes de programación (como C o C++) se compilan directamente a código máquina. Es decir, se traducen al lenguaje físico y específico del procesador y sistema operativo de esa computadora en particular. Si compilas para Windows, la Mac no entiende ni una palabra.

¿Te imaginas tener que reescribir y recompilar tu aplicación del Chat de IA para que tus amigos con Mac, Linux y Windows puedan usarla? Aquí es donde entra la magia del ecosistema Java y Kotlin.


Imagina que eres un aclamado guionista de cine y acabas de escribir una obra maestra (tu código en Kotlin). Quieres que esta obra se actúe en teatros de todo el mundo: en Japón, en Francia y en México (Windows, Mac y Linux).

Tienes dos opciones:

  1. La vía tradicional (C++): Traduces y adaptas el guion manualmente a cada idioma y cultura antes de enviarlo. (Un esfuerzo titánico).
  2. La vía de la JVM: Traduces tu guion a un idioma inventado, un idioma universal que nadie habla de forma nativa, pero que es perfecto. Luego, en cada teatro del mundo, contratas a un director de orquesta que sí entiende este idioma universal y dirige a los actores locales en tiempo real.

En el desarrollo de software:

  • El “idioma universal” se llama Bytecode.
  • El “director de orquesta” instalado en cada computadora se llama Máquina Virtual de Java (JVM).

Bajo el capó: ¿Por qué Kotlin es “Agnóstico”?

Sección titulada «Bajo el capó: ¿Por qué Kotlin es “Agnóstico”?»

Kotlin (cuando se compila para la JVM) no crea programas ejecutables directos (.exe o .app). Cuando escribes código en Kotlin y presionas “Compilar”, el compilador de Kotlin (kotlinc) lee tu código y genera archivos con extensión .class llenos de Bytecode.

Para que este código agnóstico corra, la computadora destino debe tener instalada la JVM. La JVM toma ese bytecode, lo lee sobre la marcha y le da las instrucciones nativas al procesador. Es por esto que la filosofía principal de este ecosistema es: “Escribe una vez, ejecuta en cualquier lugar”.


Anatomía de un Proyecto Kotlin: Desmitificando Gradle

Sección titulada «Anatomía de un Proyecto Kotlin: Desmitificando Gradle»

Cuando un desarrollador abre por primera vez un proyecto de Kotlin, suele encontrarse con archivos como build.gradle.kts, settings.gradle.kts o carpetas llamadas gradle/wrapper/. Para muchos, esto parece una “caja negra” mágica e intimidante. Vamos a desmitificarla paso a paso.

En proyectos profesionales, no compilamos ejecutando comandos manuales archivo por archivo en la terminal. Usamos una herramienta de construcción (Build Tool) y automatización. En el ecosistema Kotlin y Android, el estándar de la industria es Gradle.

  • settings.gradle.kts: Es el primer archivo que Gradle lee. Define el nombre de tu proyecto raíz (rootProject.name = "ai-chat-cli") y declara de qué repositorios descargar los plugins necesarios.
  • build.gradle.kts: Es el manifiesto principal de construcción. Aquí declaramos qué plugins aplicamos (por ejemplo, kotlin("jvm")), qué versión de Java usamos (JavaVersion.VERSION_17), y qué librerías externas necesita nuestra aplicación.
  • gradle/libs.versions.toml: Conocido como el Version Catalog. Es una tabla centralizada donde definimos versiones de plugins y dependencias en un solo lugar, evitando números de versión repetidos o desincronizados.
  • Kotlin DSL (.kts) vs Groovy (.gradle): Históricamente Gradle usaba Groovy (un lenguaje dinámico). Hoy en día usamos Kotlin DSL (archivos terminados en .kts). La gran ventaja es que tu archivo de configuración está escrito en el mismo Kotlin que estás aprendiendo: tiene autocompletado en el IDE, detección de errores de sintaxis en tiempo real y tipado estático seguro.

🧠 Puente Conceptual: ¿Cómo se compara Gradle con tu lenguaje?

Sección titulada «🧠 Puente Conceptual: ¿Cómo se compara Gradle con tu lenguaje?»

Si vienes de Node.js o el mundo web:

  • build.gradle.kts es el equivalente directo a tu package.json. Allí declaras scripts de ejecución y dependencias externas.
  • gradle/libs.versions.toml cumple una función similar a los bloques de versiones fijas en monorrepositorios con pnpm-workspace.yaml.
  • La tarea ./gradlew run equivale a ejecutar npm run dev o pnpm start.
  • Los plugins de Gradle (kotlin("jvm")) son como tus herramientas de compilación (esbuild, tsc o vite).

¿Dónde se guardan las dependencias? (Caché Global vs node_modules)

Sección titulada «¿Dónde se guardan las dependencias? (Caché Global vs node_modules)»

Una de las mayores sorpresas para desarrolladores que vienen de JavaScript o Python es abrir la carpeta de su proyecto en Kotlin y preguntarse: “¿Dónde están las librerías que descargó Gradle? ¡No veo ninguna carpeta node_modules ni .venv!”.

En la raíz del proyecto encontrarás dos archivos clave: ./gradlew (para macOS y Linux) y gradlew.bat (para Windows).

¿Por qué existen y por qué nunca debes borrarlos? El Gradle Wrapper es un ejecutable mínimo y portátil. Su propósito es garantizar la reproducibilidad total del software:

  1. No necesitas instalar Gradle globalmente en tu sistema operativo con Homebrew, SDKMAN o instaladores de Windows.
  2. Cuando ejecutas ./gradlew run por primera vez, el wrapper lee el archivo gradle/wrapper/gradle-wrapper.properties, descarga automáticamente la versión exacta de Gradle que requiere el proyecto, la guarda en caché y ejecuta la tarea.
  3. Esto garantiza que todos los integrantes de un equipo de ingeniería o estudiantes de este curso compilen con exactamente el mismo comportamiento, sin el clásico “en mi máquina sí compila”.

Laboratorio Incremental: El Cascarón del Chat

Sección titulada «Laboratorio Incremental: El Cascarón del Chat»

A lo largo de este curso, no haremos ejercicios aislados. Construiremos paso a paso un Chat de IA interactivo en la Terminal (CLI). Hoy, nuestra misión es preparar el terreno, instalar las herramientas profesionales y levantar el estandarte de nuestro proyecto con un “Hola Mundo”.

Clona el repositorio oficial del curso. Usaremos un sistema de Tags de Git para que puedas viajar en el tiempo a cualquier lección.

Paso 1: Abrir el proyecto en tu Entorno de Desarrollo (IDE)

Sección titulada «Paso 1: Abrir el proyecto en tu Entorno de Desarrollo (IDE)»

En la industria profesional de Kotlin y Java, contamos con múltiples alternativas según tus preferencias de flujo de trabajo y los recursos de tu computadora:

Es la opción recomendada por JetBrains y el estándar de la industria.

  1. Descarga e instala IntelliJ IDEA Community Edition (gratuito) o Android Studio.
  2. Selecciona Open y elige la carpeta raíz del repositorio clonado.
  3. Espera unos segundos a que la ventana de herramientas de Gradle (en el lateral derecho) termine de sincronizar e indexar el proyecto.
  4. Asegúrate de configurar el proyecto con un JDK 17 o superior (File -> Project Structure -> Project SDK).

Todo programa necesita un “punto de entrada”, el lugar exacto donde la JVM sabe que debe comenzar a leer. En Kotlin, esto es simplemente una función llamada main.

Abre el archivo src/main/kotlin/Main.kt que se generó y borra su contenido. Vamos a escribir el banner de bienvenida de nuestro Chat.

/**
* Punto de entrada principal de nuestra aplicación Kotlin.
*
* La JVM buscará exactamente esta función 'main' en todo nuestro proyecto
* para comenzar la ejecución.
*/
fun main() {
// println es una función de la librería estándar de Kotlin.
// Lo que hace es imprimir el texto en la consola de la computadora
// y añadir un salto de línea (Enter) invisible al final.
println("===============================")
println("🤖 Welcome to AI Chat CLI")
println("===============================")
}

Elige tu método favorito de ejecución según tu entorno:

Abre src/main/kotlin/Main.kt y, justo al lado izquierdo de la palabra fun main(), verás un pequeño botón verde de Play (▶️) en el margen. Haz clic ahí y selecciona Run ‘MainKt’. El IDE llamará al compilador de Kotlin, transformará este texto en Bytecode y la JVM lo ejecutará en tu panel inferior.

Si ves el banner de bienvenida… ¡Felicidades! Tienes tu entorno agnóstico configurado, dominas el rol de Gradle y estás listo para empezar a programar la lógica interactiva en la siguiente lección.


Para profundizar en el funcionamiento interno de la JVM y el ecosistema Kotlin, revisa la documentación oficial:


¿Tuviste problemas configurando Gradle o tu JDK, o tienes alguna sugerencia sobre esta lección?