Hoy vamos a intentar resolver un problema que aborda distintos puntos de vista, desde los Kotlin Lovers (quienes sostienen que Java debe desaparecer del plano de Android) hasta los mas conservadores (los que consideran Java uno de los mejores lenguajes para hacer prácticamente todo, desde mobile hasta web).
Mi Posición al respecto
Yo no estoy exactamente de un lado u otro, sino más bien en el medio. Arranqué como un desarrollador en Java y luego conocí Kotlin. Mi adopción no fue inmediata: al principio no me terminaba de gustar este nuevo lenguaje.
La sensación es parecida a la de Python: todo se vuelve mas acotado y cuesta leer un código que en otros lenguajes es mas verboso. Todavía veo el “elif” (else if para el resto de los lenguajes) y me cuesta entender por qué dos letras más y un espacio hacían tanto daño en la sentencia.
Sin embargo, un día me senté con un curso de unas 80 horas y terminé encontrando todas esas ventajas en Kotlin de las que muchos desarrolladores hablan por ahí.
Aún asi, habiendo probado ambas partes de la tortilla, siento que decantarse por uno u otro resulta algo injusto. Te puede gustar Kotlin, pero entender Java resume una gran historia.
Es como aprender C y C++: empezas a ver el panorama completo de por qué se hizo X de tal manera y por qué se removió Y del nuevo lenguaje.
Aún asi, no solo se trata de recorrer un museo, sino que Java se sigue utilizando en muchas soluciones como sistemas bancarios, plugins de Minecraft, sitios web (Spring) y por supuesto academias.
Los invito a generar un análisis más consciente sobre estos dos lenguajes, desde su fuerza en el mercado y sus utilidades en el mundo real.
Algunos hechos indiscutibles
Andrey Breslav es un hombre sabio. Se trata del lider de desarrollo de Kotlin, quien expuso una afirmación fundamental en el propósito de este lenguaje:
Fue diseñado para superar a Java pero sin dejar de ser interoperable con el código de este. El objetivo final es facilitar la migración a Kotlin.
Para los que no conozcan el concepto, la interoperabilidad se basa en que puedas escribir tu código en un lenguaje que sea compatible con el otro. Esto significa que en un proyecto de Android pueden existir archivos de Java y Kotlin e interactuar entre sí. Una activity en Kotlin puede generar un intent para llamar una en Java y viceversa.
Por otro lado, Google declaró Kotlin como lenguaje oficial en Android. Esto significa que en unos años (cada vez menos), Java dejará de existir en las soluciones móviles.
Otro factor interesante es que Kotlin fue creado por JetBrains (esos locos que crearon IDEs hermosos como Intellij, PHPStorm, Android Studio, PyCharm, entre otros) con el fin de desarrollar un metalenguaje que trabaje con los plugins de cada IDE. Esto significa que se basaron en Java, y por decantación, en mejorar sus características.
Kotlin es nuestro “deseado C#”: C# era todo lo que Java no pudo ser. Un lenguaje creado luego de este, el cual poseía características como las extension functions, las cuales por la estructura en que se había creado Java no podíamos replicar.
Otro factor interesante es el manejo de excepciones: mientras que en Java nos destacábamos por ser muy cuidadosos con el uso de los “if(esto == null)”, en Kotlin simplificaron este concepto con el uso de null safety. También trajeron a la mesa cosas como el elvis operator, el cual en mi opinión viene a reemplazar al condicional ternario.
La industria y su relación con Android
Hay que limpiar un poco la imagen del emprendedor early adopter. De hecho escribí un artículo al respecto. La industria esta llena de personas inteligentes y con criterio. Nadie piensa tirar abajo todas sus aplicaciones en Java y migrar a Kotlin.
Si es cierto que empresas mas chicas pueden tomar este riesgo porque sus productos son más jóvenes, o incluso estan arrancando de cero. Pero pensemos en un gigante como Amazon: aún con células de desarrolladores, dudo mucho que de un día al otro hayan dedicado todo a la migración. Siempre es una cuestión progresiva, basada en el criterio, la necesidad actual, los tiempos y los costos involucrados.
Entonces aquí viene lo interesante: Los desarrolladores en Kotlin son necesarios en la misma medida que los de Java. Hay un concepto llamado Legacy Code, el cual significa en pocas palabras “este código es viejo pero funciona”.
Si una empresa esta ganando mucho dinero con una app que se mantiene viva hace cinco años y fue desarrollada en Java, no va a cambiar su tecnología salvo que sea expresamente necesario.
Kotlin nos favorece a los desarrolladores, nos hace más ágiles y nos facilita la depuración (debugging) de errores. Pero Java lideró el mercado por años y dejó una huella difícil de borrar. Y un módulo (o cientos) que fue programado en Java con unas definiciones antiguas pero funcionales tiene tanta importancia como el nuevo que se desarrolle en Kotlin.
Por otro lado, si sos un desarrollador nuevo en el area y te metiste con Kotlin de lleno, ahora te estás preguntando si cometiste un error. La realidad es que no, porque si haces un curso corto de Java, al compartir muchas similitudes, vas a poder mantener legacy code de la misma manera que un senior en Java.
Mis años en los dos lenguajes me ayudan a detectar, por ejemplo, por qué una librería sigue manteniendo su código en Java y no migran. También me permite leer y entender legacy code, incluso desarrollar nuevos módulos si hiciera falta. El caso es que vos, querido lector/a, podes lograr lo mismo en menos tiempo estudiando Kotlin y haciendo un repaso general de Java.
Quiza mi velocidad de resolución sea superior a la tuya, pero eso lo vas a ganar con el tiempo y la práctica. Lo importante aquí es que te podés convertir en un desarrollador con las dos aristas y aplicar al mercado.
Conclusiones
Si llegaste hasta aquí, te pido disculpas por los kilogramos de texto que te he obligado a leer. Seguro me estoy dejando muchas cosas, porque comparar estos dos monstruos con el detalle que merecen me llevaría a escribir una tesis al respecto (no me tientes).
Lo importante es que más alla del lenguaje que vayas a elegir, tengas en cuenta los movimientos del mercado. Quizá si lees esto en 5 años, la respuesta más clara sea Kotlin, pero hoy día vivimos en un mundo donde los dos lenguajes coexisten.
Otra noticia interesante es que todo lo que te expliqué en Android aplica para Spring (el backend), donde hoy ya podes crear proyectos en Java o Kotlin. Las fronteras se expanden y no debo ser el único que le encanta tener opciones adicionales a la hora de desarrollar.
Disfruta codeando y no olvides que cualquier desición que tomes no resta, sino que suma a tu stack de conocimiento.
Top comments (4)
¿Por qué no .Net?
Es un buen framework también, pero intenté orientar el artículo a una persona que quiera armar un stack sobre Kotlin. Porque con C# no podes crear apps mobile (salvo Xamarin, pero es híbrido), entonces mi idea era utilizar un lenguaje que pudiera aplicar a backend, frontend y mobile de manera mas eficiente.
Ya veo. Nunca me he metido a programar móvil en C#, pero tenía entendido que Xamarin simplemente es la versión móvil de .Net. O sea, uno escribe C# y en vez de decir "compilar para .Net", uno dice "compilar para Xamarin" y ya. ¿O no?
Ahí ya no te puedo responder con seguridad porque Xamarin no es mi area de expertise, yo trabajé más años con desarrollo mobile nativo. Igual si pienso que C# funciona mucho mejor en .NET como vos decías y con Unity en videojuegos.