Java para desarrolladores C# — Misión
Por qué estoy aprendiendo esto
Sección titulada «Por qué estoy aprendiendo esto»Pienso en C#. Pero buena parte del código que leo cada día es Java: servicios Spring, plugins de build, bibliotecas cuyo port a C# va con retraso. Los dos lenguajes se parecen tanto que es fácil escribir Java como si fuera C#, y llevarse sorpresas en tiempo de ejecución: == entre dos Integer, un tipo genérico que ha desaparecido, una excepción comprobada (checked) que no compila.
Este curso es el mapa que me hubiera gustado tener: para cada tema, lo que se traslada desde C#, lo que solo lo parece y lo que no tiene equivalente.
A quién va dirigido este curso
Sección titulada «A quién va dirigido este curso»Escribes C# con soltura: clases, interfaces, genéricos, LINQ, async/await, NuGet y la CLI dotnet. Has leído algo de Java pero nunca lo has llevado a producción. Un curso de continuación, Spring Boot, Spring Cloud y Reactor para desarrolladores C#, se apoya en este.
Al final de este curso, sabré
Sección titulada «Al final de este curso, sabré»- instalar un JDK, ejecutar código Java y compilar un proyecto con Maven o Gradle;
- predecir en qué se diferencian de C# la semántica de valor, la igualdad y los números de Java;
- modelar datos con clases, records, enums e interfaces selladas;
- usar genéricos sabiendo lo que quita el borrado de tipos (type erasure);
- manejar las excepciones comprobadas,
nullyOptional; - traducir LINQ y los delegados a Streams e interfaces funcionales;
- escribir código concurrente con hilos virtuales en lugar de
async/await; - probar, empaquetar y ejecutar una aplicación Java sobre la JVM.
| # | Lección | Ya conoces |
|---|---|---|
| 1 | El JDK y las herramientas de build | el SDK de .NET, dotnet run, NuGet, .csproj |
| 2 | Tipos, igualdad y operadores | tipos de valor, checked, ==, interpolación de cadenas |
| 3 | Clases, records y enums | propiedades, virtual/override, record, enum |
| 4 | Genéricos y borrado de tipos | genéricos reificados, where T : new(), varianza in/out |
| 5 | Excepciones, null y Optional |
excepciones, using, tipos de referencia anulables |
| 6 | Lambdas e interfaces funcionales | delegados, Func/Action, eventos |
| 7 | Colecciones y Streams | List<T>, Dictionary, LINQ |
| 8 | Pattern matching | expresiones switch, patrones is, records |
| 9 | Concurrencia e hilos virtuales | Task, async/await, lock, Parallel |
| 10 | Maven y Gradle a fondo | NuGet, Central Package Management, soluciones |
| 11 | Pruebas | xUnit, Moq, FluentAssertions |
| 12 | La biblioteca estándar del día a día | DateTime, decimal, HttpClient, System.IO |
| 13 | La JVM en tiempo de ejecución (próximamente) | el CLR, ajustes del GC, dotnet-counters, Native AOT |
| 14 | Anotaciones, reflexión y módulos | atributos, generadores de código fuente, ensamblados |
Diario — lo que probé, lo que me sorprendió, lo que aún me queda por verificar.
Recursos
Sección titulada «Recursos»- dev.java — los tutoriales oficiales de Java de Oracle, al día con las últimas versiones.
- The Java Language Specification, Java SE 25 — la referencia cuando dos tutoriales no coinciden.
- Documentación de la API de Java SE 25.
- Índice de JEP de OpenJDK — cada cambio del lenguaje y de la JVM, con su motivación.
- Maven — Getting Started y el manual de usuario de Gradle.