Aprender a Programar con Java
├── Fundamentos de Java
│   ├── Sintaxis básica
│   ├── Tipos de datos (int, double, char, boolean)
│   ├── Variables y constantes
│   ├── Operadores (aritméticos, lógicos, relacionales)
│   ├── Estructuras de control (if, else, switch)
│   └── Bucles (for, while, do-while)
│
├── Programación Orientada a Objetos (POO)
│   ├── Clases y objetos
│   ├── Métodos y constructores
│   ├── Encapsulación (getters y setters)
│   ├── Herencia
│   ├── Polimorfismo
│   └── Interfaces y clases abstractas
│
├── Estructuras de Datos
│   ├── Arrays
│   ├── Listas (ArrayList, LinkedList)
│   ├── Mapas (HashMap, TreeMap)
│   └── Conjuntos (HashSet)
│
├── Manejo de Excepciones
│   ├── Try-catch-finally
│   ├── Creación de excepciones personalizadas
│   └── Throws y throw
│
├── Entrada y Salida (I/O)
│   ├── Lectura y escritura de archivos
│   └── Uso de Scanner para entrada de datos
│
├── Librerías y Frameworks Básicos
│   ├── Librerías estándar (java.util, java.io)
│   └── Introducción a frameworks (Spring, Hibernate)
│
├── Entorno de Desarrollo
│   ├── Instalación JDK
│   ├── Uso de IDE (Visual Studio Code)
│   └── Compilar y ejecutar programas Java
│
└── Proyectos y Práctica
    ├── Programas pequeños (calculadora, juegos simples)
    ├── Proyectos más grandes (gestores, aplicaciones de consola)
    └── Participar en comunidades y retos (HackerRank, LeetCode)
