[VIDEO] Kotlin: um debate sincero sobre a linguagem e seu uso em Java e Android

[VIDEO] Kotlin: um debate sincero sobre a linguagem e seu uso em Java e Android

Lucas Abrão começou a trabalhar com desenvolvimento Java para mobile em 2004, nos tempos do J2ME. De lá pra cá, tem se atualizado constantemente na área, e há cerca de um ano começou a trabalhar também como desenvolvedor Kotlin. Engenheiro de software experiente, atualmente cursa o mestrado na CESAR School de Recife, tendo desenvolvido sistemas para grandes empresas como IBM, Accenture, e Banco Santander.  

Marcos Santos é engenheiro de software formado pela Fatec de São Paulo, e atualmente cursa a pós em Gestão de Sistemas da Informação no IFSP. Assim como Lucas, ele também trabalha com a linguagem Kotlin há pouco mais de um ano. Sua área de atuação chegou a passar pelo mobile, mas o seu “forte mesmo”, como diz, é no backend, trabalhando para o banco digital iti Itaú.

Recentemente, os dois desenvolvedores participaram de um meetup organizado pela Revelo para um bate-papo franco e muito sincero sobre a linguagem Kotlin. Neste artigo, trazemos os principais pontos dessa conversa, levantando os “mitos e verdades” sobre Kotlin, além de referências para quem deseja se aprofundar ou começar a estudar essa linguagem de programação.

Em primeiro lugar, a pergunta que não quer calar: afinal, o Kotlin vai substituir o Java?

Lucas: Muita gente se apaixonou de cara pelo Kotlin pelo fato de escrever menos código, uma vez que no Java tem muita coisa que chamamos de “boilerplate code”, que é um código que a gente escreve desnecessariamente. As novas versões do Java inclusive têm buscado contornar isso, sabe… e tem melhorado muito porque agora o Java também está copiando coisas do Kotlin, só que o Kotlin para alguns segmentos vem desbancando o Java: por exemplo, no desenvolvimento Android, para algumas coisas mais pontuais digamos assim.

Fato é que ambas as linguagens se conversam muito bem, então a maioria esmagadora dos desenvolvedores Kotlin são pessoas que atuam com o Java também, são os devs que já têm o Java como primeira linguagem, então a curva de aprendizado é bem menor também. Sendo que o Kotlin e o Java são “parentes”, digamos assim: o Java é a “linguagem mãe” do Kotlin, apesar do Kotlin ter pego outras coisas boas de outras linguagens, programação funcional por exemplo, que no Java é mais fraco.

Mas o Kotlin é uma linguagem de programação que tem seu lugar específico e que está crescendo, não só na parte do Android mas até no backend também. A maioria das vagas que pedem Java hoje pedem também conhecimento em Kotlin, e vice-versa. É muito difícil achar vaga só de Kotlin para dev, sempre pedem conhecimento de uma outra linguagem também. Então acho que “desbancar” não é bem por aí.

Marcos: É verdade, e um ponto interessante que o Lucas tocou é que na verdade o Kotlin não vem nem para sobrepor o Java, mas ao invés disso acaba sendo uma alternativa. Então, ao mesmo tempo que tem muitas aplicações que contam com o Java, a gente tem a opção de utilizar o Kotlin também. Acho que a maior alegria do pessoal que desenvolve em Kotlin é realmente ter que lidar com menos código mesmo. Às vezes [no Java] você ia printar alguma coisa, tinha que importar um monte de coisa junto também. O Kotlin vem para simplificar isso, e acaba sendo mais assim um “canivete” no nosso bolso, ou seja, mais uma alternativa.

Crédito: kotlinlang.org

Sendo uma alternativa, quando é que vocês usam o Kotlin ou o Java? Como é que vocês decidem por uma ou outra linguagem?

Marcos: A gente tem visto no mercado o uso da base da JVM, mas tem outras opções também, como o Kotlin for Javascript, que é basicamente uma forma de codificar o Kotlin para ele virar um código JavaScript. E tem o Kotlin Native também, que é basicamente transformar o Kotlin em um código nativo ali, por exemplo um Swift, um C, C++; então o Kotlin tem sido multiplataforma e tem dado essa stack para os devs.

Lucas: Acho que não se pode pensar só em linguagem, sabe. Quando você vai desenvolver um projeto, tem que pensar na arquitetura como um todo. Tem que pensar numa coisa assim: “será que vale a pena desenvolver nessa linguagem? Porque eu vou utilizar essa linguagem”? Porque o Java por exemplo não é só uma linguagem, Java é uma plataforma que tem uma linguagem. O Kotlin utiliza essa plataforma, que tem a JVM, então precisa pensar no Java mais como uma plataforma de software, que tem uma linguagem de mesmo nome.

Então como o Marcos comentou, a gente consegue compilar o código também para utilizar em outras plataformas; a gente costuma falar “você vai atacar em outras frentes” que é por exemplo no Javascript, com o native; e a JVM é muito usada pelo fato do Java ser bem rico: na JVM o cara vai ter todas as bibliotecas do Java, uma linguagem que já existe há muitos anos e que sempre lança alguma coisa nova.

Mas existem situações onde realmente o Java é melhor e outras onde o Kotlin é melhor. Para coisas de transaction, por exemplo, quem trabalha com banco geralmente usa Java. Mas para coisas de menor processamento, que a gente chama no Kotlin “lightweight-bread”, tem sido mais usado o Kotlin, porque uma thread é muito recurso, e você no celular não tem muito recurso ali, então precisa analisar bem o que é a aplicação e qual o motivo de querer usar uma linguagem ou outra.

Marcos: Interessante também que, querendo ou não, o Kotlin tem caminhado para ser uma full-stack - igual o Javascript, que a gente tem na parte da web com Node, no frontend com React, Angular, Vue - e o Kotlin parece estar caminhando para isso também. Tem ali a página de como a gente faz um backend, um mobile… então, por exemplo, hoje eu trabalho lá no iti e basicamente a gente utiliza muitos microsserviços em Kotlin, mas também no mobile a usamos o Kotlin… o que eu acho legal inclusive para uma troca de ideias entre o pessoal do frontend e do backend.

Quando falamos em desenvolvimento Android, é possível utilizar Kotlin em uma parte e Java em uma outra no mesmo app?

Marcos: Sim. Inclusive uma vantagem sempre bem destacada do Kotlin pela comunidade é justamente essa parte de interoperabilidade, ou seja, a gente consegue usar tanto Java quanto Kotlin porque ambas as linguagens utilizam a base da JVM, então vai compilar o código, vai transformar em batch code e aí vai rodando, não é, Lucas?

Lucas: Sim, na verdade tem annotations que você inclui nos seus métodos, no Java e no Kotlin, por exemplo ‘JvmOverloads’ que estabelece algo como “eu quero que esse método aqui rode, seja chamado, que sobrescreva aquilo que está no Java, ou que chame a classe Java a partir de dentro desse código Kotlin aqui”; então consegue fazer isso também, que diz respeito à interoperabilidade das duas linguagens. Então um desenvolvedor Kotlin consegue trabalhar dentro de um projeto Java tranquilamente. Mas lógico que vai ter aí algumas annotations e tal, porque também não é mágica né… é um negócio que precisa de todo um meio de campo, mas nada que uma annotation não resolva.

Marcos: É verdade. Acho que talvez isso também acaba dando destaque para o Kotlin justamente porque para quem já tinha alguns projetos rodando em Java, o dev não precisava desmontar tudo com o sistema em produção.

Lucas: Projeto é dinheiro né… então, tipo, abrir mão de tudo não dá. Agora, novas versões de outras coisas, aí vale a pena. Por exemplo, se vamos começar com coisas mais novas, ou mesmo algum tipo de manutenção, algo mais rápido, você consegue. Com Kotlin você escreve menos, ponto. E eu acho que é isso que bombou no Kotlin; em Java você tem que criar uma classe, colocar um ‘public-static-void-main’ e tal, fazer assinatura do método, tudo para dar um System. out. println() para poder imprimir. No Kotlin basta dar um printf() e um println e acabou… você escreve um fun main lá e println resolve seu problema. No Java tem essa limitação de precisar escrever muito mais código, mesmo nas novas versões não estão melhorando isso não.

Vocês querem comentar mais alguma coisa sobre o desenvolvimento Android em si?

Lucas: Eu só ia comentar que assim como a linguagem mais usada para o Android era o Java, que o Google abraçou, mas aí teve aquele problema com a Oracle, e a partir de 2017 o Google começou a investir mais no Kotlin também para fugir desse tipo de situação incômoda, e a comunidade abraçou porque viu que o Kotlin tem uma interoperabilidade boa com Java, ele usa JVM principalmente, mas assim, esmagadoramente, é Kotlin atacando JVM, utilizando tudo do Java, e outra também é que a maioria esmagadora dos desenvolvedores Kotlin em geral vem do Java… então é uma mão lavando a outra. Mas o Kotlin é uma linguagem que é mais simples, para Android cresceu muito, porque o Android cresceu muito também. Então o Java continua rodando no Android, mas o Kotlin é a linguagem chave do Google para Android.

Marcos: É verdade. Inclusive eu passei por uma experiência muito parecida com isso que você comentou em uma determinada empresa que eu trabalhava. A gente tinha o código em Java no app, mas a partir de um determinado momento o pessoal falou: a partir de hoje só vamos usar Kotlin, então qualquer novidade, qualquer feature nova, qualquer projeto novo não era mais olhando ali para o cara desenvolver em Java, e sim em Kotlin, pelo fato do Google ter adotado e também pelo fato de ser uma linguagem que tem uma ótima documentação. Então se a gente for olhar tanto para a documentação do Android quanto para a web, é algo que facilita bastante na parte do desenvolvimento, né, Lucas?

Lucas: Sim, e outra coisa boa do Kotlin é que o programador Java aprende o código muito rápido, é muito parecido em muita coisa, apesar da sintaxe lembrar algumas coisas antigas, tipo o Pascal, a ideia do Kotlin lembra o Java em muita coisa. Então a curva de aprendizado é muito rápida. A ideia de rodar sobre a JVM, compilar em batch code, isso me lembra alguma coisa.. e é o Java. Então é muito parecido e vale a pena. Kotlin é uma linguagem que tem um futuro legal, com Android inclusive.

Antes de entrarmos para o futuro e tendências da linguagem, vocês tem exemplos de projetos que possam compartilhar as experiências com a gente aqui?

Lucas: Sim, eu fiz um projeto para a GFT, que é a empresa onde eu trabalho atualmente, que tá no meu github pessoal. É um projeto de reserva de livro, chamado booktracking da época que estava estudando Kotlin para backend, e aí para esse projeto eu fui com aquela cabeça de Java, e em muita coisa eu estava meio que apanhando sabe, tipo ‘cara, como eu faço isso, como eu faço aquilo’, e aí eu usei o Spring Boot na época, utilizei todo o Spring mesmo, o contexto de SpringREST todo para usar no Kotlin, só que o Kotlin bate de frente algumas coisas do Hibernate, e também no próprio JPA (Java Persistence API), porque o Kotlin preza muito pela imutabilidade dos objetos.

Já o Hibernate preza pela mutabilidade né, e aí o Kotlin tinha um framework novo (não sei se é novo mas para mim era) que é o Ktor, e o pessoal usa para fazer RESTful API, essas coisas. Eu usei o Spring mesmo, porque eu conhecia o Spring e era um projeto bem simples, onde o aluno cadastra no leilão de livros e também cadastra uma pessoa que pegou o livro emprestado. Então eu tinha que cadastrar os dois, e fiz por conta mesmo, mais para poder estudar. Tem todo o conceito de microsserviço, conceito de REST, de repositório, MVC, do próprio Spring Boot, então é uma coisa bem moderninha mas bem simples.

Marcos: É bem legal ver o Lucas contando as experiências dele porque a gente vai se identificando com elas. Eu também trabalhei em alguns apps da West Wing, que é um ecommerce de casa e decoração, e da Shopper também, que é um mercado online; e participei de projetos novos como o “next day delivery”, que é quando você compra em um dia e chega no outro. Então eu trabalhei toda essa parte do app junto com a equipe, e hoje aqui no iti Itaú a gente tem bastante microsserviços em Kotlin.

Por exemplo, trabalhando com a minha squad toda aquela parte que os bancos oferecem o rendimento do CDI, e tem sido uma experiência muito legal. Para alguns segmentos, o Kotlin aparece como uma mão na roda, que para nós que somos desenvolvedores, não tem jeito, sendo do segmento financeiro precisa ter um suporte muito bom. E uma coisa que o Lucas comentou e que eu gosto bastante, é como a comunidade Kotlin é bem forte: então a gente vê frameworks como Spring, o Feign Client, uma biblioteca para fazer requisições para outras APIs que foi construída pela Netflix, que é bem legal e é bem robusta, então tem ajudado bastante nos projetos também.

Lucas: Sim, e o bom do Kotlin é que ele tem umas coisas que o Java tá começando agora a colocar, que são ferramentas que ajudam bastante o dev. Por exemplo, no Java você tem NullPointerException o tempo todo pipocando na tela, e a gente perde muito tempo com esse negócio; no Kotlin, a gente já não tem isso… ele é Null-Safe. Mas você pode sim forçar um objeto Kotlin a ficar nulo, e consegue utilizar de forma segura na aplicação.

Entrando no cenário de tendências e futuro da linguagem, o que vocês esperam na parte de atualizações e da linguagem como um todo?

Marcos: Eu vejo que o Kotlin tende para um cenário multiplataforma, ou seja, de ser usado não só no mobile, ou com o Kotlin Native no iOS, mas principalmente na web, e até em data science. Existem algumas ferramentas que oferecem suporte para o Kotlin hoje em dia na parte de data science, então acho que o Kotlin tem caminhado para isso. E o mais legal é que o Kotlin tem um grande suporte: tem o Google, tem o Jetbrains, não é algo que vai, digamos assim, ‘morrer facilmente’. É legal ter uma empresa gigantesca por trás, mas mais bacana ainda é ter uma comunidade para difundir conhecimento. Então é uma linguagem que veio para ficar.

Lucas: Muita gente não sabe que é possível fazer muita coisa no back-end também. Eu enxergo o Kotlin como uma linguagem que oferece bom suporte, que inclusive forçou o Java a se reinventar mais ainda; e o inverso também acontece, ou seja, o Java forçar o Kotlin também a se reinventar mais. Essa briga é boa para nós que somos desenvolvedores, sabendo que sempre vai ter coisas novas, e para a comunidade também, obviamente.

Vejo o Kotlin como uma linguagem mais moderna, apesar do Java ter todo um conceito envolvido. Mas o Kotlin é uma linguagem mais leve, então não vai precisar ficar usando um canhão para matar uma mosca, no fim das contas usar as duas linguagens acaba sendo um bom casamento. E óbvio também que muitas das vagas de Java para backend hoje em dia pedem conhecimento de Kotlin, assim como muitas vagas de Kotlin também pedem conhecimento de Java. Então hoje Kotlin é uma linguagem que veio para ficar mesmo.

Marcos: Vou aproveitar para compartilhar um link do Github com vocês, que mostra as empresas que já adotaram o Kotlin, e a gente vê que são empresas que são bastante reconhecidas em seus segmentos, tem bastante projeto, sinal que tem bastante espaço no mercado também.

Lucas: Fora que tem a interoperabilidade, nada impede que a empresa que tem projeto em Java e Kotlin possa colocar os dois trabalhando juntos nesse projeto; ela pode contratar um dev de Kotlin para trabalhar em projeto Java, em módulos diferentes, mas que vai chamar o serviço, porque não? Do mesmo jeito que consumiu um serviço de Node, algo assim, pode consumir um serviço de Kotlin também, e ainda mais com o conceito de microsserviço, de aplicação com ciclo de vida próprio, resolver isso em Kotlin é o de menos, a empresa só precisa do resultado, da resposta do serviço. Então vem para ficar mesmo.

Marcos: Fora também a curva de aprendizado. Eu por exemplo já tinha contato com Java, mas vim do PHP, que é uma linguagem não tipada. Tem algumas diferenças ali, mas no final, quando eu tive contato mesmo com Kotlin a curva de aprendizado foi muito grande. Somente quando a gente tem os conceitos de programação bem estimulados, como lógica por exemplo, facilitar muito as coisas. Mas a grosso modo a curva de aprendizado é legal e bem documentada, e isso ajuda muito tanto para quem está começando como para quem está migrando de área, e o Kotlin dá esse “abraço” no desenvolvedor, o que ajuda muito.

Para quem quer começar uma carreira em Kotlin, quais são as dicas em termos de estudos, referências de documentação e etc?

Marcos: Uma coisa que eu acho fundamental, e que serve também para outras linguagens, é aprender lógica de programação. É uma coisa que não muda: você pode ir para Kotlin, PHP, Python… enfim, é um conceito que não vai mudar, e a gente sente falta disso no mercado. O dev muitas vezes sabe usar o framework, sabe usar uma lib, mas por baixo dos panos ele não sabe o que acontece, e acaba virando uma bola de neve.

Então acho que os primeiros passos é aprender fortemente a parte de lógica de programação, depois pegar a documentação do Kotlin, tipagem de variáveis, estrutura condicional “if”, um “else” e um “when” também, que é uma estrutura condicional do Kotlin; ver estrutura de repetição… enfim, começar engatinhando mesmo, mas sem se apressar, mas fazendo passo a passo, sem se deixar tomar pela ansiedade.

Daí depois de dominada essa parte, seguir para banco de dados, começar a pegar framework, a parte de arquitetura, Solid e Design Patterns. Tem um doc chamado Kotlin Koans, que é muito bom para quem está iniciando: basicamente, você vai corrigir alguns testes que estão com erro, desde o nível básico até o mais avançado. Então pra quem tá começando e acho que até pra quem já está dominando a linguagem, vale a pena estudar em cima disso.

Lucas: Tem muito material no Kotlin, eu particularmente gosto do site da Baeldung, tem muitos artigos bons, e tutoriais legais, mas começa do zero mesmo. Gosto muito também da série de livros da “Read First”. Tem o do Kotlin, é um livro que começa bem cru, então tem que ter paciência, mas é um material bem legal. Mas é o que o Marcos falou: quem quer aprender de verdade tem que começar pela lógica de programação, pois com lógica você aprende a linguagem que quiser, é a base para tudo na computação.

A partir da lógica você vai se aprofundando, pegando um pouquinho da estrutura de dados, o que é uma lista, uma pilha, uma fila, uma árvore de pesquisa binária, enfim, coisas que você não acha em muito tutorial por aí. Tem muita gente se vendendo como pleno, senior, mas que acaba dando uma travada legal nos testes quando vai tentar passar por uma vaga de emprego. Então é estudar recursividade, pegar um código que você já conhece e tentar resolver com recursão (se der), e aí nisso vai tentando melhorar no Kotlin; e também fazendo aplicativos para estudar: com Spring, com ktor, aplicativo para rodar local na máquina mesmo, umas coisas assim. Afinal, só se aprende a fazer colocando a mão na massa mesmo.

Pergunta do chat: “Não sei quase nada de programação, escolhi Kotlin como minha primeira linguagem. Estou estudando Kotlin para backend. Eu teria que aprender Java primeiro para entrar no mercado mais rápido? Como está o mercado de Kotlin para backend"?

Lucas: Kotlin em backend você vai encontrar bem menos vagas. Porque para backend é mais rápido encontrar vagas que envolvem Java. E a razão disso é que o Java é uma linguagem que já está no mercado há mais de 25 anos, e que sempre está se adaptando às novas tendências, e sempre precisa de desenvolvedor Java no mercado também.

Com o Kotlin, hoje, o que acontece é o seguinte: para muitas dessas vagas em Java, as empresas pedem conhecimento em Kotlin para backend também. Então, a dica que eu dou para você é: já que está aprendendo programação, aprende programação pura mesmo: o que é um “if”, uma “classe”, um objeto, sem mexer com nenhum framework. Aprende o “grosso” primeiro, aquilo que serve para todas as linguagens do mundo.

Aí depois você começa a estudar um pouquinho de design patterns, e começar a mexer com app, porque para isso é bom saber o que é um controller, o que é um service, o que é uma entidade, symbol… então essas coisas vão se somando; mas se você pegar a base, você vai aprender a linguagem que você quiser, só sintaxe mesmo. Agora, Java você encontra emprego mais rápido, só que para backend. Mas hoje em dia todo mundo que pede Java está pedindo Kotlin também, então você vai ter que aprender Java também.

Marcos: O mais interessante disso tudo é que são linguagens que representam muito bem o conceito de orientação de objetos: em qualquer banco da faculdade o pessoal tá sempre ensinando mais o Java, mostrando a parte de orientação de objetos, um extend, uma herança, polimorfismo, uma sobrescrita, uma sobrecarga, então eu acho muito interessante começar principalmente olhando pra essa parte de tipagem, porque às vezes a gente acha que a memória da máquina é infinita, mas não, ali tem uma alocação de memória, tem todo um fluxo envolvido.


Assista ao vídeo com a íntegra do bate-papo em: