O desenvolvimento de aplicativos é indiscutivelmente um dos campos de avanço mais rápido em TI, com novas estruturas e tecnologias surgindo quase todos os meses. Para sincronizar meu conhecimento básico com o que está acontecendo no desenvolvimento de aplicativos em 2023, conversei com Valentin Telegin, um especialista experiente com mais de 20 anos de experiência em tecnologia móvel que passou de desenvolvedor na Yandex a CTO de uma grande Holding de TI.
Multiplataforma parece ser uma necessidade no mundo de hoje. Você pode elaborar sobre abordagens modernas para o desenvolvimento multiplataforma?
Sim, uma das principais tendências do desenvolvimento de aplicativos é o desenvolvimento multiplataforma, que envolve a criação de um aplicativo capaz de rodar em várias plataformas ao mesmo tempo. Essa abordagem oferece diversas vantagens, como facilidade de manutenção, teste e evolução do código compartilhado, além de compatibilidade com diversas plataformas como Android, iOS, web e desktop.
Por exemplo, em um projeto onde desenvolvemos um aplicativo de usuário para assinantes de uma empresa de telecomunicações, utilizamos o Kotlin Multiplatform Mobile. Ele permite escrever código compartilhado na linguagem Kotlin, mas você ainda precisa criar UIs separadas para diferentes sistemas operacionais. Dessa forma, o aplicativo parece nativo para os usuários, enquanto o desenvolvimento é acelerado por meio de código compartilhado.
Outra opção para criar aplicativos de plataforma cruzada é usar o Flutter SDK do Google. Nesse caso, o código do aplicativo é escrito apenas uma vez e compartilha uma interface comum em todas as versões. Nossa empresa também implementou esses aplicativos para fins internos. Uma vantagem importante é o processo de desenvolvimento muito mais rápido, que pode ser várias vezes mais rápido do que criar aplicativos separados para iOS e Android. No entanto, como a interface é a mesma para cada sistema, pode parecer não nativa para os usuários. Por exemplo, botões ou animações podem ser exibidos de forma diferente e assim por diante.
O Flutter agora ocupa um nicho que antes pertencia a projetos baseados no framework React Native. Muitos desenvolvedores do Flutter têm experiência em projetos da Web e alguns deles também tiveram experiência com o React Native. Apesar da necessidade de aprender a linguagem Dart e a nova estrutura, a comunidade de desenvolvedores do Flutter está crescendo rapidamente. Afinal, os benefícios do Flutter o tornam uma das opções mais rápidas para criar um aplicativo móvel do zero.
Quando se trata de desenvolvimento nativo para Android ou iOS, os engenheiros de software criam o aplicativo inteiro para cada sistema operacional separadamente. Embora esses aplicativos possam rodar mais rápido, eles demandam o dobro de recursos para desenvolvimento: escrever o código duas vezes, projetar a interface e, em seguida, testar, entre outras tarefas. Embora essa abordagem convencional seja a forma como a maioria dos aplicativos é desenvolvida, existem métodos para aprimorar a eficiência do desenvolvimento de plataforma cruzada.
O desenvolvimento de aplicativos multiplataforma é uma tendência relativamente nova. Atualmente, existem engenheiros de software experientes suficientes especializados neste domínio?
Sim, essa é uma pergunta muito boa. De fato, a falta de pessoal qualificado no desenvolvimento multiplataforma e, consequentemente, o longo processo de contratação foram os motivos pelos quais comecei a desenvolver um programa de treinamento na academia de desenvolvimento de aplicativos da Epic.
Com este programa, os desenvolvedores juniores que já possuem alguma experiência e gostariam de mergulhar no mundo do desenvolvimento de aplicativos e aumentar suas habilidades, têm a oportunidade de obter uma nova especialização. Aqueles que concluíram o treinamento com sucesso podem juntar-se a nós ou a outra grande empresa de TI e aplicar seus conhecimentos para resolver tarefas técnicas complexas em projetos de alta carga.
O desenvolvimento de aplicativos com baixo e sem código ganhou popularidade nos últimos anos. O que você acha dessas abordagens?
Bem, este tópico levanta um pouco de hype. Existem dezenas de cursos Low-code/No-code diferentes disponíveis, e eles estão sendo promovidos como uma maneira fácil de entrar no setor de TI. Por exemplo, algumas maneiras comuns de entrar no campo são por meio de testes, Python ou desenvolvimento Low-code/No-code.
Existem várias ferramentas que permitem criar um aplicativo sem escrever uma única linha de código. Esta pode ser uma boa solução para certos tipos de tarefas. Mas tenho que admitir que essas ferramentas são realmente mais adequadas para tarefas muito simples, como criar rapidamente um aplicativo MVP do zero sem nenhum design ou construir um protótipo para testar uma ideia.
Criar aplicativos completos, muito menos aqueles para um grande número de usuários, é um desafio com soluções Low-code/No-code. Essas soluções são tão genéricas que os aplicativos baseados nelas tendem a parecer padronizados e funcionar de maneira semelhante, com velocidade medíocre.
Então, sim, essa tendência existe, mas eu não a atribuiria a um desenvolvimento sério de produtos. Grandes empresas geralmente não se envolvem nesse tipo de projeto.
Você pode compartilhar conosco algumas estruturas populares para desenvolvimento de aplicativos a partir de agora?
Quando se trata de desenvolvimento de aplicativos, há uma tendência atual de transição para estruturas de interface do usuário que usam uma abordagem declarativa, na qual os desenvolvedores criam interfaces usando código. Isso significa que um desenvolvedor descreve as funções que definem como a interface deve aparecer, como a aparência de um botão e a resposta aos pressionamentos, tudo dentro do código.
No passado, a abordagem era exatamente o oposto. Por exemplo, no desenvolvimento do Android, os layouts de tela foram descritos usando arquivos XML, que especificavam o posicionamento de botões, aninhamento de elementos, alinhamentos e assim por diante. Este era um método estático para definir interfaces.
Agora, tudo é escrito diretamente no aplicativo usando código, sem nenhum XML predefinido ou outras representações visuais. Tudo é feito dinamicamente através do código.
Para Android, existe a biblioteca Jetpack Compose , muito popular no momento. Tentamos implementar novos aplicativos ou novos recursos em aplicativos existentes usando o Compose porque é mais rápido e simples. Para iOS, existe a biblioteca SwiftUI , que permite o uso de uma abordagem declarativa para descrever a aparência do aplicativo.
A abordagem declarativa surgiu originalmente no desenvolvimento web e depois se tornou uma tendência no desenvolvimento de aplicativos. Essa é outra razão para o rápido crescimento da comunidade Flutter e sua popularidade entre os desenvolvedores da Web, mudando sua especialização para desenvolvimento de aplicativos.
O Flutter inicialmente usa uma abordagem declarativa, já que é um SDK relativamente novo. Como resultado, a velocidade de desenvolvimento com o Flutter é muito maior. Em primeiro lugar, o código é escrito apenas uma vez; em segundo lugar, o aplicativo é executado em várias plataformas imediatamente e a interface do usuário é projetada em estilo declarativo.
E as abordagens modernas para gerenciamento de projetos no desenvolvimento de aplicativos?
Bem, é claro, a abordagem depende muito do projeto e da empresa específicos, mas, no geral, existe uma abordagem Agile+Scrum amplamente aceita. É utilizado por muitas equipes, algumas seguindo a forma pura, onde todos os processos são rigorosamente cumpridos, enquanto outras acham isso excessivo e usam apenas as peças que são realmente necessárias para o seu trabalho.
Por exemplo, se uma equipe precisa fazer uma demonstração ou uma retrospectiva, eles realizam esses procedimentos. No entanto, se algo parece redundante, essa parte é ignorada. Existem muitos frameworks disponíveis, mas, pela minha experiência, a maioria das equipes usa uma mistura de abordagens diferentes com base no bom senso.
A configuração específica e a eficácia de uma abordagem dependem muito do tamanho e da experiência da equipe. Desenvolvedores experientes que trabalham com scrum há muito tempo podem abandonar certos procedimentos redundantes ou saber como substituí-los. Por outro lado, aqueles com menos experiência podem precisar mergulhar nessas estruturas para entender como funcionam, quando lidar com tarefas de forma independente e quando procurar ajuda.
Existem também frameworks que servem como extensões. Quando um projeto envolve um grande número de pessoas, elas podem ser divididas em subequipes. Cada subequipe trabalha sob o Scrum, mas todos estão unidos sob um framework mais amplo como, por exemplo, Large Scale Scrum (LeSS) . Eles distribuem tarefas entre si, mas acabam entregando um produto único e coeso. Portanto, há muitas opções disponíveis para usar quando se trata de gerenciamento de projetos.
Vamos agora falar um pouco sobre colaboradores e gestão de equipes. Muitas empresas de TI mudaram para um formato de trabalho remoto ou híbrido. Quais são as vantagens e desvantagens dessas abordagens?
A pandemia permitiu que muitas empresas de desenvolvimento de software oferecessem opções de trabalho remoto. Antes da pandemia, não havia muitas empresas que permitiam o trabalho remoto durante o processo de contratação; a maioria dos cargos era baseada em escritório. Na melhor das hipóteses, você pode negociar para trabalhar remotamente por 1 a 2 dias. Agora, tornou-se uma prática generalizada.
Por exemplo, quando novos funcionários entram em nossa empresa, eles geralmente têm três opções: trabalhar no escritório (que quase ninguém usa), um modelo híbrido em que você deve vir ao escritório alguns dias por semana ou trabalhar totalmente remoto com a opção de se deslocar ao escritório, mas sem obrigação de o fazer.
No entanto, o trabalho remoto impôs certas restrições à comunicação da equipe, pois você não pode simplesmente ir até um colega e fazer uma pergunta. São necessários métodos de comunicação mais formais, como enviar um e-mail ou agendar uma reunião ou ligação. Muitas vezes, organizar uma reunião que exige a presença de vários executivos torna-se um quebra-cabeças complicado. Os desenvolvedores, por outro lado, tendem a evitar reuniões tanto quanto possível e dedicam seu tempo de trabalho a escrever código. Encontrar um equilíbrio entre manter o número mínimo de reuniões de equipe necessárias e trazer apenas os funcionários realmente necessários para a reunião torna a vida ainda mais difícil para os gerentes.
Outra questão são as entrevistas remotas com candidatos a empregos. No passado, os candidatos iam ao escritório, sentavam-se em uma sala de reuniões e conversavam cara a cara. Agora, as entrevistas são realizadas remotamente, na melhor das hipóteses com vídeo, mas às vezes com uma conexão ruim. Quando você não pode observar o comportamento de um candidato diretamente, muitas vezes é mais desafiador avaliar suas habilidades sociais e interpessoais.
Portanto, existem desafios relacionados à avaliação de um possível funcionário durante entrevistas remotas. A integração remota e as apresentações da equipe também devem ser conduzidas para estabelecer relacionamentos dentro da equipe. Isso pode ser bastante difícil, especialmente se os membros remotos da equipe não puderem ir almoçar ou participar de um evento juntos.
Como uma das formas de abordar esta questão, a nossa empresa organiza diversos eventos online e offline. Há também reuniões online regulares, como sincronizações técnicas, onde colegas que trabalham com a mesma tecnologia podem se comunicar, trocar informações ou apresentar temas específicos. Por exemplo, se alguém implementou algo legal em um projeto, pode compartilhar essa informação com outros desenvolvedores de outras equipes.
Também é útil quando uma equipe pode se encontrar pessoalmente em um ambiente informal pelo menos a cada poucos meses para sentir o espírito geral da equipe. O trabalho remoto não oferece a mesma sensação de pertencimento que estar fisicamente presente com os colegas, especialmente se você nunca os conheceu pessoalmente e só os conhece por meio de seus avatares.
Você acha que a realização de hackathons, inclusive na área de desenvolvimento de aplicativos, ajudará a promover esse domínio e atrair mais talentos?
Hackathons reúnem pessoas completamente diferentes – desenvolvedores, designers, gerentes de produto, analistas e empreendedores – para resolver um problema específico ou criar algo novo.
Eu realmente gosto deste formato. Participei como membro do júri, especialista e mentor em vários hackathons, como Digital Breakthrough, VirusHack e IoT hackathon da GeekBrains. Tem sido uma experiência inestimável que me ajudou a ter outras perspectivas na solução de vários problemas, bem como a ser carregado pela energia que vem desse 'caldo de ideias' concentrado em um local em um curto espaço de tempo.
Hackathons fornecem uma plataforma para os participantes liberarem sua criatividade e encontrarem soluções inovadoras para problemas complexos. Eles são uma excelente oportunidade para ganhar experiência prática e aprender novas técnicas com colegas, mentores e especialistas, ao mesmo tempo em que aprimoram as habilidades técnicas e de comunicação. Além disso, o networking nesses eventos é uma ótima chance de conhecer pessoas com ideias semelhantes e líderes do setor. Prazos de desenvolvimento rápidos ajudam os participantes a desenvolver imunidade para trabalhar sob estresse e aprender a obter resultados rapidamente.
Durante os hackathons, os desenvolvedores móveis oferecem a oportunidade de apresentar um protótipo de um produto ou tecnologia da maneira mais favorável e, muitas vezes, permitem que você veja imediatamente o resultado no aplicativo que criou. Os aplicativos móveis, juntamente com os aplicativos da Web, são a principal forma de implementar uma interface de usuário.
Na minha opinião, os hackathons são uma experiência valiosa para quem quer melhorar as suas competências técnicas e sociais, construir uma rede de contactos e trabalhar em projetos interessantes com outros entusiastas.
Fonte: https://hackernoon.com/the-future-of-mobile-development-navigating-trends-and-challenges-in-2023