Enable javascript in your browser for better experience. Need to know to enable it? Go here.

Linguagens & Frameworks

Adote ?

  • Quando a Apple lançou o SwiftUI alguns anos atrás, foi um grande passo para implementação de interfaces de usuário em todos os tipos de dispositivos fabricados pela Apple. Desde o início, gostamos da abordagem declarativa e centrada no código, além do modelo de programação reativa fornecido pelo Combine. Percebemos, no entanto, que escrever muitos testes de visualização, o que ainda é necessário com um padrão de modelo-visualização-modelo de visualização (MVVM), não era realmente sensato com o framework de automação XCUITest fornecido pela Apple. Essa lacuna foi fechada pelo ViewInspector. Um obstáculo final foi a versão mínima do sistema operacional necessária. No momento do lançamento, apenas as versões mais recentes do iOS e do macOS podiam executar aplicativos escritos com SwiftUI, mas devido à cadência regular de atualizações da Apple, os aplicativos SwiftUI agora podem ser executados em praticamente todas as versões do macOS e do iOS que recebem atualizações de segurança.

  • Tivemos experiências suficientes com Testcontainers para considerarmos uma opção padrão útil na criação de um ambiente confiável para a execução de testes. É uma biblioteca, portada para várias linguagens, que "dockeriza" dependências de teste comuns — incluindo vários tipos de bancos de dados, tecnologias de enfileiramento, serviços em nuvem e dependências de teste de interface do usuário, como navegadores web — com a capacidade para executar Dockerfiles personalizados quando necessário. Funciona bem com frameworks de teste como JUnit, é flexível o suficiente para permitir que os usuários gerenciem o ciclo de vida do contêiner e a rede avançada, além de configurar rapidamente um ambiente de testes integrado. Nossos times consideraram essa biblioteca de contêineres programáveis, leves e descartáveis consistentemente capaz de tornar os testes funcionais mais confiáveis.

Experimente ?

  • Ao desenvolver um aplicativo com React Native, às vezes você precisa criar seus próprios módulos. Encontramos essa necessidade, por exemplo, ao construir uma biblioteca de componentes de interface do usuário para um aplicativo React Native. Criar um projeto de módulo desse tipo não é simples, e nossos times têm relatado sucesso usando Bob para automatizar essa tarefa. Bob fornece uma CLI para criar o scaffolding para diferentes destinos. O scaffolding não se limita à funcionalidade principal, mas, opcionalmente, pode incluir código de exemplo, linters, configuração de pipeline de compilação e outros recursos.

  • Flutter é cada vez mais popular para criar aplicativos móveis multiplataforma, enquanto Unity é uma ótima opção para a criação de experiências de AR/VR. Uma peça chave no quebra-cabeça para integrar Unity e Flutter é o Widget Flutter-Unity, que permite incorporar aplicativos Unity dentro de widgets do Flutter. Um dos principais recursos que o widget oferece é a comunicação bidirecional entre Flutter e Unity. Descobrimos que seu desempenho também é muito bom e estamos otimistas com a perspectiva de usar o Unity em mais aplicativos Flutter.

  • Kotest (anteriormente KotlinTest) é uma ferramenta de testes independente para Kotlin que continua ganhando força dentro de nossos times em várias implementações Kotlin — nativas, JVM ou JavaScript. As principais vantagens são o fato de oferecer uma variedade de estilos de teste para estruturar as suítes, além de disponibilizar um conjunto abrangente de matchers que permite testes expressivos em uma DSL interna elegante. Somando-se à sua compatibilidade com testes baseados em propriedades — uma técnica que destacamos anteriormente no Radar — nossos times apreciam o sólido plugin IntelliJ e a crescente comunidade de suporte.

  • Algumas linguagens de programação, especialmente as mais recentes, possuem uma solução de gerenciamento de pacotes e dependências incorporada. Quando foi lançado em 2014, o Swift não vinha com um gerenciador de pacotes e, portanto, a comunidade de pessoas desenvolvedoras de macOS e iOS simplesmente continuou usando CocoaPods e Carthage, soluções de terceiros criadas para Objective-C. Alguns anos depois, Swift Package Manager (SwiftPM) foi iniciado como um projeto de código aberto oficial da Apple e alguns anos se passaram até a Apple adicionar suporte ao Xcode. Mesmo atualmente, entretanto, muitos times de desenvolvimento continuaram usando CocoaPods e Carthage, principalmente porque muitos pacotes simplesmente não estavam disponíveis via SwiftPM. Agora que a maior parte dos pacotes pode ser incluída via SwiftPM e os processos foram ainda mais simplificados para criadores e consumidores, nossos times têm contado cada vez com o SwiftPM.

  • Vowpal Wabbit é uma biblioteca de aprendizado de máquina de uso geral. Originalmente criado no Yahoo! Research há mais de uma década, Vowpal Wabbit continua a implementar novos algoritmos de aprendizado por reforço. Gostaríamos de destacar o Vowpal Wabbit 9.0, um lançamento significativo após seis anos, e incentivar você a planejar sua migração, já que a nova versão possui várias melhorias de usabilidade, novas reduções e correções de bugs.

Avalie ?

  • O Android Gradle plugin Kotlin DSL adicionou suporte para Kotlin Script como uma alternativa aos scripts de compilação Groovy for Gradle. O objetivo de substituir o Groovy pelo Kotlin é fornecer melhor suporte para refatoração e edição mais simples em IDEs, bem como produzir código mais fácil de ler e manter. Para times que já usam Kotlin, isso também significa trabalhar na compilação em uma linguagem familiar. Um de nossos times migrou um script de compilação de 450 linhas de pelo menos sete anos de existência em poucos dias. Se você tiver scripts de compilação gradle grandes ou complexos, vale avaliar se o Kotlin Script produzirá melhores resultados para seus times.

  • Para quem prefere uma linguagem mais natural do que JSON para código de infraestrutura, Azure Bicep é uma linguagem específica de domínio (DSL) que usa uma sintaxe declarativa e suporta modelos parametrizados reutilizáveis para definições de recursos modulares. Uma extensão Visual Studio Code fornece segurança de tipo instantânea, IntelliSense e verificação de sintaxe, e o compilador permite transpilação bidirecional de/para modelos ARM. O DSL orientado a recursos da Bicep e a integração nativa com o ecossistema Azure o tornam uma opção atraente para o desenvolvimento de infraestrutura do Azure.

  • Estamos debatendo o valor das ferramentas de desenvolvimento móvel multiplataforma há quase tanto tempo quanto publicamos o Technology Radar. Observamos pela primeira vez uma nova geração de ferramentas em 2011 ao falar sobre plataformas cross-mobile. Apesar de nosso ceticismo inicial, essas ferramentas foram aperfeiçoadas e amplamente adotadas ao longo dos anos. E ninguém pode questionar a popularidade duradoura e a utilidade do React Native. Capacitor é a última geração de uma linha de ferramentas que começou com PhoneGap, depois renomeada para Apache Cordova. Capacitor é uma reescrita completa do Ionic que adota o estilo progressive web app para aplicações independentes. Até o momento, nossos times de desenvolvimento gostam do fato de poderem abordar aplicações web, iOS e Android com uma única base de código, gerenciando as plataformas nativas separadamente com acesso às APIs nativas quando necessário. Capacitor surge como uma alternativa ao React Native, que por sua vez conta com muitos anos de experiência multiplataforma por trás.

  • Normalmente não incluímos novas versões de linguagens, mas queríamos destacar a nova versão de suporte de longo prazo (LTS) do Java, versão 17. Embora existam novos recursos promissores, como a visualização de correspondência de padrões, é a mudança para o novo processo LTS que deve interessar a muitos negócios. Recomendamos que as organizações avaliem as novas versões do Java à medida que forem disponibilizadas, certificando-se de adotar novos recursos e versões conforme apropriado. Surpreendentemente, muitas organizações não adotam rotineiramente versões mais recentes de linguagens, embora as atualizações regulares ajudem a manter as coisas reduzidas e gerenciáveis. Esperamos que o novo processo LTS, juntamente com migração de organizações para atualizações regulares, ajude a evitar a armadilha da mentalidade "é muito caro atualizar", que tem como resultado o software de produção sendo executado em uma versão do Java em fim de vida útil.

  • O Android 12 trouxe mudanças significativas nos widgets de aplicativos, melhorando a experiência do uso e de desenvolvimento. Para escrever aplicativos Android comuns, expressamos nossa preferência pelo Jetpack Compose como uma maneira moderna de criar interfaces de usuário nativas. Agora, com o Jetpack Glance, construído em cima do tempo de execução do Compose, as pessoas desenvolvedoras podem usar APIs Kotlin declarativas semelhantes para escrever widgets. Recentemente, o suporte do Glance foi estendido ao Tiles for Wear OS.

  • O Android possui hoje várias APIs de mídia: Jetpack Media, também conhecido como MediaCompat, Jetpack Media2 e ExoPlayer. Infelizmente, essas bibliotecas foram desenvolvidas de forma independente, com objetivos diferentes, mas funcionalidades sobrepostas. As pessoas desenvolvedoras de Android não apenas tiveram que escolher qual biblioteca usar, como também tiveram que lidar com a programação de adaptadores ou outro código de conexão quando os recursos de várias APIs eram necessários. Jetpack Media3 é um esforço, disponível atualmente para acesso antecipado, para criar uma nova API que utiliza áreas comuns de funcionalidade das APIs existentes — incluindo interface de usuário, reprodução e manipulação de sessão de mídia — combinando-as em uma API mesclada e refinada. A interface do player do ExoPlayer também foi atualizada, aprimorada e simplificada para atuar como a interface do player comum para o Media3.

  • MistQL é uma linguagem pequena e específica de domínio para realizar cálculos em estruturas semelhantes a JSON. Originalmente desenvolvida para extração manual de recursos de modelos de aprendizado de máquina no frontend, MistQL atualmente oferece suporte a uma implementação de JavaScript para navegadores e uma implementação de Python para casos de uso do lado do servidor. Gostamos bastante de sua sintaxe funcional limpa e composta, e incentivamos você a avaliá-la com base em suas necessidades.

  • Embora muitas ferramentas ofereçam suporte ao desenvolvimento de vários pacotes no universo node.js, o npm 7 adiciona suporte direto com a adição do npm workspaces. Gerenciar pacotes relacionados de forma conjunta facilita o desenvolvimento, permitindo, por exemplo, armazenar várias bibliotecas relacionadas em um único repositório. Com o npm workspaces, uma vez que você adiciona uma configuração em um arquivo package.json de nível superior para fazer referência a um ou mais arquivos package.json aninhados, comandos como npm install funcionarão em vários pacotes, vinculando os pacotes de origem dependentes ao diretório root node_module. Outros comandos npm também estão adaptados aos espaços de trabalho, permitindo, por exemplo, executar npm run e npm test em vários pacotes com um único comando. Ter essa flexibilidade pronta para uso diminui a necessidade de alguns times de buscar outro gerenciador de pacotes.

  • Acompanhamos a migração da renderização de sites do lado do servidor para as aplicações de página única (SPAs) no navegador, e agora o pêndulo do desenvolvimento web parece retornar ao meio. Remix é um exemplo. É um framework JavaScript full-stack que fornece carregamentos de página rápidos, aproveitando sistemas distribuídos e navegadores nativos, em vez de compilações estáticas desajeitadas. Algumas otimizações foram feitas no roteamento aninhado e no carregamento de página, o que torna a renderização da página especialmente rápida. Muitas pessoas vão comparar o Remix com o Next.js, que está posicionado de forma semelhante. Estamos felizes em ver esses frameworks combinando habilmente o tempo de execução do navegador com o tempo de execução do servidor para fornecer uma melhor experiência de uso.

  • Executar uma tarefa agendada uma vez, apenas uma vez, em um cluster de processadores distribuídos é um requisito relativamente comum. Por exemplo, a situação pode surgir durante a ingestão de um lote de dados, envio de uma notificação ou executar alguma atividade de limpeza regular. Mas este é um problema notoriamente desafiador. Como um grupo de processos coopera de forma confiável em redes lentas e menos confiáveis? Algum tipo de mecanismo de bloqueio é necessário para coordenar ações em todo o cluster. Felizmente, vários armazenadores distribuídos podem implementar um bloqueio. Sistemas como ZooKeeper e Consul, bem como bancos de dados como DynamoDB ou Couchbase, têm os mecanismos subjacentes necessários para gerenciar o consenso em todo o cluster. ShedLock é uma pequena biblioteca usada para aproveitar esses provedores em seu próprio código Java, caso você deseje implementar suas próprias tarefas agendadas. Fornece uma API para adquirir e liberar bloqueios, bem como conectores para uma ampla variedade de provedores. Se você está escrevendo suas próprias tarefas distribuídas, mas não quer assumir a complexidade de uma plataforma de orquestração inteira como Kubernetes, vale a pena dar uma olhada no ShedLock.

  • SpiceDB é um sistema de banco de dados inspirado no Zanzibar, do Google, para gerenciar permissões de aplicativos. Com SpiceDB, você cria um esquema para modelar os requisitos de permissões e usa a biblioteca cliente para aplicar o esquema a um dos bancos de dados suportados, inserir dados e realizar consultas para responder com eficiência a perguntas como "este usuário tem acesso a este recurso?" ou até mesmo o inverso "quais são os recursos aos quais esse usuário tem acesso?" Normalmente, defendemos a separação das políticas de autorização do código, mas o SpiceDB dá um passo adiante, separando os dados da política e armazenando-os como um grafo para responder com eficiência às consultas de autorização. Devido a essa separação, você deve assegurar que as alterações no armazenamento de dados primário de seu aplicativo sejam refletidas no SpiceDB. Entre outras implementações inspiradas em Zanzibar, achamos que o SpiceDB é um framework interessante para avaliar suas necessidades de autorização.

  • sqlc é um compilador que gera código Go idiomático de tipo seguro a partir do SQL. Ao contrário de outras abordagens baseadas em mapeamento relacional de objeto (ORM), você continua escrevendo SQL simples para suas necessidades. Uma vez invocado, o sqlc verifica a correção do SQL e gera um código Go de alto desempenho, que pode ser chamado diretamente do restante do aplicativo. Com suporte estável para PostgreSQL e MySQL, achamos que vale a pena avaliar o sqlc.

  • O desenvolvimento de aplicativos para iOS tornou-se mais simples ao longo do tempo, e a mudança do SwiftUI para o anel Adote é um sinal disso. Indo além da natureza geral do SwiftUI e outros frameworks comuns, The Composable Architecture (TCA) é uma biblioteca e um estilo arquitetural para criação de aplicativos. Foi projetado ao longo de uma série de vídeos, e o time responsável afirmou ter em mente composição, testes e ergonomia, baseando-se em ideias do The Elm Architecture e do Redux. Como esperado, o escopo estreito e opinativo é tanto um ponto forte quanto um ponto fraco do TCA. Acreditamos que os times que não têm muita experiência em escrever aplicativos para iOS – geralmente equipes que estão cuidando de várias bases de código relacionadas com diferentes pilhas de tecnologia –, são as que mais se beneficiam do uso de um framework opinativo como o TCA. Nós gostamos de como as opiniões são expressas no TCA.

  • WebAssembly (WASM) é o padrão W3C que fornece recursos de execução de código no navegador. Suportado por todos os principais navegadores e compatível com versões anteriores, é um formato de compilação binária projetado para ser executado no navegador em velocidades quase nativas. WebAssembly abre a gama de linguagens que você pode usar para escrever funcionalidades de front-end, com foco inicial em C, C++ e Rust, além de ser um objetivo de compilação LLVM. Quando executado no sandbox, pode interagir com JavaScript e compartilhar as mesmas permissões e modelo de segurança. Portabilidade e segurança são os principais recursos que habilitarão a maioria das plataformas, incluindo dispositivos móveis e IoT.

  • Zig é uma nova linguagem que compartilha muitos atributos com C, mas com tipagem mais forte, alocação de memória facilitada, suporte para namespaces e uma série de outros recursos. Sua sintaxe, no entanto, é uma reminiscência de JavaScript e não do C, o que pode pesar contra para algumas pessoas. O objetivo do Zig é fornecer uma linguagem muito simples com compilação direta, minimizando os efeitos colaterais e fornecendo uma execução previsível e fácil de rastrear. O Zig também oferece acesso simplificado à capacidade de compilação cruzada do LLVM. Algumas de nossas pessoas desenvolvedoras acharam esse recurso tão viável que estão usando o Zig como um compilador cruzado, embora não estejam escrevendo código Zig. Zig é uma linguagem nova e vale a pena considerar para aplicações nas quais C está sendo considerado ou já em uso, bem como para aplicações de sistemas de baixo nível que requerem manipulação explícita de memória.

Evite ?

 
  • languages-and-frameworks quadrant with radar rings Adote Experimente Avalie Evite Adote Experimente Avalie Evite
  • Novo
  • Modificado
  • Sem alteração

Não encontrou algo que você esperava achar?

 

Cada edição do Radar inclui blips que refletem nossas experiências nos seis meses anteriores. Talvez já tenhamos falado sobre o que você procura em um Radar anterior. Às vezes, deixamos coisas de fora simplesmente porque há muitas a serem abordadas. Também pode faltar um tópico específico porque o Radar reflete nossa experiência, não se baseando em uma análise abrangente do mercado.

Não encontrou algo que você esperava achar?

 

Cada edição do Radar inclui blips que refletem nossas experiências nos seis meses anteriores. Talvez já tenhamos falado sobre o que você procura em um Radar anterior. Às vezes, deixamos coisas de fora simplesmente porque há muitas a serem abordadas. Também pode faltar um tópico específico porque o Radar reflete nossa experiência, não se baseando em uma análise abrangente do mercado.

Radar

Baixar o Technology Radar Volume 26

English | Español | Português | 中文

Radar

Mantenha-se por dentro das tendências de tecnologia

 

Seja assinante

Visite nosso arquivo para acessar os volumes anteriores