Kotlin, IT na Estônia e (de repente) o túnel entre Tallinn e Helsinque: uma entrevista com Anton Keks

Recentemente, um post muito específico sobre Kotlin foi publicado em nosso blog: não muito sério, bastante superficial e inesperadamente estimulante. Mas sabemos que criticar uma tecnologia passando vários dias estudando é uma má educação. E, dessa vez, decidimos conversar sobre o Kotlin com uma pessoa que escreve sobre ele no prod da versão 1.0.



Hoje, o nome Kotlin já é difícil de surpreender, principalmente no desenvolvimento do Android. Talvez tenha sido no início de 2016: a demanda era uma ordem de magnitude mais baixa, o suporte oficial ao Google ainda estava fora de questão e escrever sobre Kotlin era um espírito ousado. Anton Keks se tornou um desses temerários, e mais tarde ele também prestou muita atenção a Kotlin (por exemplo, ele se apresentou duas vezes no KotlinConf). Portanto, decidimos perguntar a ele como a vida do desenvolvedor do Kotlin mudou ao longo do tempo.

E para não se levantar duas vezes, eles abordaram outro tópico. Anton é co-fundador da empresa estoniana Codeborne, que pratica programação extrema; portanto, ao mesmo tempo, eles aprenderam o que há na Estônia com TI e como criar sua própria empresa lá.

- Como você começou a escrever no Kotlin, e como você o usa agora?
- Começou a usar no início de 2016, a partir da versão 1.0. Meu primeiro projeto em Kotlin foi o mais seguro: um plug-in para o IntelliJ IDEA, que fiz para um cliente japonês. Depois disso, iniciei e transferi meus projetos pessoais do Java para o Kotlin e tentei usá-lo para o back-end.

No ano passado, usamos a linguagem no back-end no ambiente bancário, estamos gradualmente transferindo o grande projeto Java para o Kotlin. E escrevemos microsserviços nele, e o Kotlin é limpo. Quando você tem um projeto apenas no Kotlin, tudo se torna ainda mais agradável: você não precisa pensar em interoperabilidade com Java.

- Desde que você viu o idioma da versão 1.0 ao 1.3 de hoje - como ele mudou do ponto de vista do desenvolvedor que o escreveu?
- No começo, pensei, desde a versão de lançamento, tudo já é incrível e funcionará sem problemas. Acabou não sendo bem assim, e a primeira lacuna, entre 1,0 e 1,1, é em grande parte uma correção das ações, uma melhoria no desempenho e assim por diante. Mas as versões 1.2 e 1.3 são sobre novos recursos.

Por exemplo, as corotinas que se tornaram estáveis ​​na versão 1.3 podem fazer uma grande diferença. Eu brinquei com eles e estou muito satisfeito. No entanto, na produção, ainda não os testamos: tudo ainda está nas dificuldades associadas aos drivers JDBC. Porém, no desenvolvimento para Android, é mais fácil criar um modelo assíncrono; portanto, os desenvolvedores do Android usaram corotinas de até 1,3.

E o que ainda é muito interessante: na versão 1.2, apareceu o suporte experimental para projetos de várias plataformas, tornou-se possível compilar em JavaScript com Kotlin / JS e em código nativo com Kotlin / Native. Mas, por enquanto, a compilação em JavaScript é assustadora para mim e, com o Native, o principal problema é que o Kotlin possui uma biblioteca padrão muito pequena. No caso da JVM, o Kotlin é muito dependente da biblioteca Java padrão. E no Kotlin / Native, em teoria, você pode usar qualquer biblioteca nativa, mas depois perde a "plataforma cruzada completa", tudo fica separado. No entanto, o JetBrains está atualmente trabalhando nisso e a plataforma cruzada pode ter um grande futuro. Aplicativos iOS / Android multiplataforma são o que muitos gostariam.

- Xamarin e React Native já tentaram nos dar ...
"Todos eles têm um problema que Kotlin não enfrenta." No caso do React Native, Xamarin e similares, a estrutura precisa acompanhar as versões do SO. Algo quebra constantemente, e todas essas estruturas não se mantêm. Você está em um estado incompreensível quando uma nova versão do sistema operacional já foi lançada e sua estrutura ainda não funciona e você ainda precisa fazer algo. Este é o momento mais desagradável. E com o Kotlin, nesse sentido, tudo é diferente - eles usam diretamente todas as APIs e bibliotecas padrão da linguagem.

- Freqüentemente, um recurso do Kotlin aparece como um "experimental" e consegue mudar antes de uma versão estável. Você gosta dessa abordagem? Se você usa recursos experimentais, quanto eles mudam e quanto você precisa refazê-lo?
Sim, eu gosto. Como havia realmente muitos bugs nas versões beta e nos candidatos à versão 1.3 (mesmo no meu relatório com puzzlers, encontrei alguns puzzlers sobre esse tópico), e na versão final eles os corrigiram, e isso é muito bom.

Nas corotinas, algumas coisas se tornaram um pouco mais complicadas, mas ficou mais claro o que está acontecendo: por exemplo, tornou-se necessário transmitir mais explicitamente o contexto às corotinas. E no final, o código com corotinas escritas no Kotlin 1.2, agora simplesmente não é compilado. Mas, ao mesmo tempo, essas mudanças não são tão grandes que foi difícil migrar.

- Se não estamos falando sobre a própria linguagem, mas, por exemplo, sobre o IDE, para onde foi o desenvolvimento? Como estavam as coisas antes, e agora o que?
- Como o JetBrains produz a linguagem, o compilador e as ferramentas, houve uma situação sem precedentes em termos de suporte no IDE. Muitas vezes, quando uma língua nasce, os adotantes iniciais são inicialmente escritos nela em um editor de texto sem destaque e assim por diante. E, com o Kotlin, isso nem era a versão 1.0, o suporte no IDE foi imediatamente.

No entanto, não era o ideal e, com o tempo, melhora constantemente, com cada versão secundária, inspeções são adicionadas. E o que é agora é muito melhor do que era. Por exemplo, um desses erros que eu estava esperando por correções: existem seqüências de caracteres de modelo no Kotlin e eu queria tentar usá-las em vez de outra linguagem de modelagem em meus projetos, mas, devido a um erro no IDE, o destaque foi interrompido assim que a variável dentro da sequência de modelos começou em Kotlin. E agora está finalmente consertado, então comecei a usá-lo. No momento, não tenho mais nada específico que não seria adequado.

- E o desenvolvimento do ecossistema como um todo - a comunidade, as respostas ao Stack Overflow, as estruturas?
- Até onde eu sei, a comunidade é muito ativa, há muita atividade no Slack. O estouro de pilha já foi gravado o suficiente. Talvez o único problema seja que, quando o Google, às vezes, existem algumas postagens escritas antes da versão 1.0, quando alguns recursos eram completamente diferentes. Você tem que seguir a relevância.

Existem estruturas criadas imediatamente especificamente para o Kotlin. Por exemplo, uma excelente estrutura para testes de unidade MockK, é adaptada ao Kotlin, existem APIs muito mais bonitas. Além disso, muitas estruturas Java agora também estão especificamente envolvidas no suporte ao Kotlin, não que seja estritamente necessário com sua interoperabilidade, mas adicionam alguns chips ou tornam o uso ainda mais conveniente.

- A explosão de popularidade no mundo Android não levou a um viés na comunidade, quando todo mundo se importa apenas com o Android, e outras plataformas desapareceram em segundo plano?
"De alguma forma, não sinto nenhuma inclinação." Obviamente, a decisão do Google de tornar o Kotlin o idioma oficial do Android afetou drasticamente o aumento do interesse no idioma, mas parece-me que ele disparou não apenas no Android, mas também no interesse do idioma em geral. Muitos desenvolvedores de Android no KotlinConf, mas também existem muitos que escrevem aplicativos de servidor, desktop e até JS: conheci pessoas que realmente usam a escrita de código no lado do cliente e no lado do servidor. E não há sensação de que seja "uma linguagem para o android". Embora o Android tenha se tornado um fator de interesse, ele ainda é uma linguagem de uso geral.

- Com as novas tecnologias, existe um eterno medo de "interessante, mas você ainda não pode arrastá-lo para a produção". No Android, não existe esse problema, mas fora do Android ainda há uma pergunta. Se essas preocupações são relevantes para Codeborne, então, quando você usa o Kotlin, o que mudou?
- Escolhemos principalmente a tecnologia, mas muitas vezes acontece que o cliente também quer participar da tomada de decisões. E, no momento, quando levamos o Kotlin para diferentes projetos, não há objeções. O que mudou: antes, os clientes não tinham ouvido nada sobre o Kotlin, mas agora ele já está na audiência. E agora, se dissermos "estamos começando a mudar para Kotlin", não há mais medo, por exemplo, de que ele desapareça. Existe a Fundação Kotlin, há JetBrains e outras empresas em boas condições financeiras. E o apoio da comunidade é ótimo. Em geral, é absolutamente certo que Kotlin não vai a lugar nenhum.

- Muitos vêm para Kotlin agora, depois de pularem os estágios descritos do desenvolvimento da linguagem. Isso só pode ser invejado, porque eles já adquiriram uma tecnologia mais madura, ou sem a experiência de adotantes precoces, perdem algo importante?
- Depende da pessoa, o que é mais interessante para ele. Ao conectar-se anteriormente, pode-se participar pessoalmente do desenvolvimento, influenciar a formação. Especialmente antes da versão 1.0, houve um tempo em que você poderia conversar com a equipe JetBrains, influenciar suas decisões, ajudá-los. E agora a equipe ainda está se voltando para a comunidade e levando em consideração sua opinião, mas ao mesmo tempo muitas decisões básicas já foram tomadas e não serão alteradas. Portanto, tudo depende do interesse pessoal em tal.

Na minha opinião, começar a usar a tecnologia para o desenvolvimento quando não está mais cru ajuda muito: você gasta tempo em suas tarefas e não em falhas. E sua ferramenta funciona para você. Penso que agora chegou o momento em que aqueles que não experimentam o Kotlin - agora estão realmente muito atrasados ​​e perdem muito.

- Agora que tudo está bem em geral, o que você pessoalmente não tem no caso de Kotlin?
"Talvez duas pequenas coisas." Bastante menor é um operador ternário. É claro que, se for uma expressão, você pode simplesmente usá-la, mas deseja escrever com mais familiaridade.

Um pouco maior - acesso ao pacote local. Parece-me que interno em Kotlin é mais um erro. Eles tentaram melhorar o que há em Java, mas, na minha opinião, eles fizeram isso em vão. Em Java, isso mais ou menos funcionou bem e é interno apenas é útil se você estiver escrevendo uma biblioteca, não um aplicativo comum. E sinto falta do controle de acesso refinado que o Java possui.

Bem, eu quero desenvolver o desenvolvimento multiplataforma, sobre o qual eu já falei. Lá você precisa trabalhar em uma biblioteca padrão. Mas também existe a estrutura Ktor, e agora é uma plataforma de teste escrever tudo no Kotlin, e algumas bibliotecas estão emergindo desse projeto



- Passemos à segunda parte das perguntas: Estônia, Codeborne, empreendedorismo. Para começar, uma pergunta inacessível: como é viver em Tallinn em geral?
- Talvez eu não seja a pessoa certa para esta pergunta, porque sou fã de Tallinn, parece-me que este é o melhor lugar da Terra. Por um lado, temos a União Européia, a moeda européia, a ordem européia e a pureza européia. Por outro lado, você pode usar o idioma russo amplamente (um terço da população fala com certeza), e estamos geograficamente próximos. Muitos especialistas em TI da Rússia, Ucrânia e Bielorrússia estão vindo para nós agora - acho que é exatamente por esses motivos.

A cidade não é tão grande quanto Moscou ou São Petersburgo, portanto você não gasta muito tempo em transporte, e geralmente é conveniente andar a pé. Ao mesmo tempo, se você quer variedade, é fácil ir para o exterior. E em termos de preços, Tallinn é mais barato que a Inglaterra e outros países europeus; portanto, o padrão de vida que você pode pagar pelo mesmo salário em Tallinn é muito mais alto.

Dos pontos negativos, apenas o clima. No verão é muito bom e no inverno é lindo com neve, mas novembro é um mês muito deprimente.

- Bem, você não se acostuma com os últimos petersburgers / moscovitas. E o país com TI?
- Temos um nível muito alto de desenvolvimento de tecnologia. Tudo relacionado ao “estado eletrônico” está se desenvolvendo ativamente - até o programa de residência eletrônica, quando você pode se tornar um residente de um país on-line, sem nunca estar nele. Muitos serviços on-line, que são novos em outros países, são um dado adquirido por nós. As startups aparecem - por exemplo, o Skype era originalmente estoniano. Os empregos também são abundantes. Portanto, eu diria que há muitas coisas interessantes para os especialistas em TI.

- Parece repentino: intuitivamente, parece que esses centros de TI estarão em lugares como o Vale, e não em um país com uma população menor que a de Novosibirsk.
- Bem, no Valley, é apenas uma pessoa de TI que poderia ser pior, há preços imobiliários irreais e geralmente o custo de vida.

E, talvez, pouco seja escrito sobre a Estônia em fontes russas, mas se você olhar para a imprensa internacional, há muitos textos no espírito de “estado eletrônico, o primeiro do mundo” (aqui está um ótimo exemplo ). Quando vou a conferências de TI ao redor do mundo, elas me dizem: “Estônia? Ah, você tem essa TI aí! ”

Além disso, perto de Tallinn, há Helsinque, entre uma hora e meia de água ou 15 minutos de helicóptero. E há negociações para fundir Tallinn-Helsinki em um hub europeu de TI. Um túnel entre duas cidades é possível, então será o túnel mais longo do mundo.

- Quando em um país com uma pequena população de grandes TI, é provável que funcione principalmente para clientes estrangeiros?
- Sim, qualquer empresa emergente aqui quer sair para o mercado internacional o mais rápido possível. O interior é pequeno em número de pessoas. Mas, graças ao fato de estarmos na União Europeia, temos o mercado da União Europeia imediatamente. Além disso, um pequeno mercado doméstico permite que a TI teste algumas coisas antes do lançamento mundial.

- Muitos russos na mente dos estados bálticos estão se fundindo, portanto, esclareceremos: quanto o que foi dito sobre a Estônia se aplica à Letônia e à Lituânia?
- Não é muito aplicável, na verdade. Existem algumas interseções, mas a mentalidade é diferente, para letões e lituanos está mais próxima do leste europeu. A história dos países também é completamente diferente. Portanto, se você for passear por Tallinn, Riga e Vilnius, sentirá que são diferentes e, se viver mais, haverá ainda mais diferenças.

Era uma vez eu trabalhei com letões e lituanos no trabalho - então os estonianos acabaram sendo os mais progressistas em TI, depois adotaram os letões e os lituanos ainda mais tarde.

- Você é um dos co-fundadores da empresa estoniana Codeborne - para começar, conte-nos.
- Somos pequenos, somos 32. Todos os desenvolvedores, nós os chamamos não de "desenvolvedor", mas de "engenheiro de software" - essa é uma diferença muito importante, porque não temos analistas, testadores ou gerentes de produto. Temos pessoas de fullstack universal que, além do desenvolvimento de fullstack, também lidam com o cliente diretamente, sem intermediários que possam definir tarefas para si mesmos. Graças a isso, a eficiência é muitas vezes superior à de muitas outras empresas de TI. Podemos construir coisas com duas ou quatro pessoas para as quais milhares de pessoas serão necessárias para o Sberbank condicional. A propósito, não estou brincando, conversamos com o Sberbank sobre esse assunto, eles estavam interessados ​​em interagir. Mas parece-me que, em larga escala, é impossível uma eficiência como as nossas pequenas. É por isso que não queremos crescer muito. Cultura da empresa - aja rapidamente, faça pequenas quantidades de pessoas de maneira super eficiente, resolva grandes problemas para que o cliente não espere seis meses. Para isso, usamos, por exemplo, programação extrema e programação em pares.

- Todo esse extremo extremo é uma característica particular de Codeborne, ou é típico da Estônia em geral? Em outro país, você seria capaz?
- Vamos apenas dizer que o aggel na Estônia é típico, equipes pequenas são bem típicas. Mas acho que somos diferentes e fomos ainda mais longe. É improvável que existam muitas empresas que emparelham a programação em tais números e que sejam tão centradas no desenvolvedor.

Acho que isso pode ser feito em qualquer país, não criamos um modelo do zero - focamos em várias empresas, uma delas em Chicago. Lemos alguns blogs e, principalmente nos Estados Unidos, vi uma abordagem mais próxima da nossa.

Acho que a abordagem dos clientes ajudou inicialmente. Os salários por hora são comuns na Estônia, você pode dizer que vê tantas horas humanas e, juntos, descobriremos como fazer o melhor possível com o orçamento disponível. Na Estônia, essa idéia não precisa ser vendida. E, por exemplo, na Rússia, a maioria das empresas clientes não está pronta para isso, elas querem pagar pelo projeto, embora, no final, para o cliente, em regra, pareça mais caro.

- No início da entrevista, o cliente japonês foi mencionado - isso é típico? Quando clientes no exterior e mesmo aqueles com quais idiomas você tem que lidar?
- Sobre o Japão - sim, normalmente, a Estônia trabalha muito com os japoneses, eles vêm aqui como delegações inteiras.

Nós nos comunicamos com quase todos os clientes em inglês, apenas com o russo em russo. Eles não concordam em mudar para o inglês - talvez muitos possam, mas são tímidos. Por isso, percebemos que temos desenvolvedores especialmente valiosos que falam russo.

E trabalhamos com outros países em inglês - embora os japoneses geralmente não sejam muito ingleses, mas aqueles que chegam à Estônia para negociações geralmente falam. E mesmo na Estônia, muitas vezes nos comunicamos em inglês, porque nos últimos dez anos tem sido muito cosmopolita, principalmente em TI. Muitos especialistas vieram de todo o mundo, então quase sempre acontece que nem todos os envolvidos no diálogo falam estoniano. Penso que esta é também a razão pela qual é fácil mudar para a Estônia - o principal é saber inglês, o estoniano não é obrigatório.

- Eu acho que muitos desenvolvedores teoricamente gostariam de criar sua própria empresa, mas eles temem que não tenham tempo para programar, e a mudança será para pior. O que mostra sua experiência em criar uma empresa na Estônia?
"Eu diria isso." Codeborne tem cerca de nove anos e, durante esse período, quando alguém sai da empresa, na maioria das vezes, para criar a sua. Por um lado, isso é um insulto, porque crescemos e educamos as pessoas; por outro, é lisonjeiro que as pessoas acreditem que o próximo passo após Codeborne pode ser exatamente isso.

E eu diria que criar uma empresa é uma opção interessante, mas esteja realmente preparado para o fato de que na maioria das vezes (principalmente no início) você terá tarefas que não estão relacionadas à TI. « », , — .

, - . — , .

— — « ». , « »?
— , flat-. « », , , — « ». , , , core team 10 , 30 - . .

— « »: ? ?
— : . ( ), — . . : , , , .

— , - . ?
— . , , , . Codeborne, — , , - . , ( ) , — , - . . .

Neste fim de semana, Anton apresentou o segundo conjunto de quebra-cabeças Kotlin em Moscou na conferência Mobius . Além dele, o programa também tem muitas coisas interessantes para desenvolvedores de dispositivos móveis (por exemplo, o relatório "Kotlin para escrever código comum para Android e iOS" ).


Source: https://habr.com/ru/post/pt431328/


All Articles