![A startup de computação quântica Infleqtion nomeia Matthew Kinsella como CEO](https://optimuscloud.com.br/wp-content/uploads/2024/04/1712340006_A-startup-de-computacao-quantica-Infleqtion-nomeia-Matthew-Kinsella-como-150x150.jpg)
A startup de computação quântica Infleqtion nomeia Matthew Kinsella como CEO
5 de abril de 2024![Ruby on Rails não está morto e pode até ser uma panacéia de IA para desenvolvedores](https://optimuscloud.com.br/wp-content/uploads/2024/04/1712349844_Ruby-on-Rails-nao-esta-morto-e-pode-ate-ser-150x150.jpg)
Ruby on Rails não está morto e pode até ser uma panacéia de IA para desenvolvedores
5 de abril de 2024A nuvem é um sistema orgânico que evolui e as possibilidades são infinitas — você pode essencialmente construir o que quiser. Ao mesmo tempo, é um lugar hostil e intimidante.
Quando converso com novos desenvolvedores ou pessoas que estão migrando para a nuvem, eles dizem que lutam com a quantidade de complexidade envolvida na implantação na AWS, no Google Cloud Platform ou no Azure, na configuração de funções IAM, na configuração de redes e na necessidade de entender como usar dezenas de diferentes serviços.
Para lidar com tudo isso, muitas equipes simplesmente “enfiam” aplicativos em nuvem em contêineres. Isso cria um mundo pequeno e isolado para os desenvolvedores — mas a verdade é que é muito limitante porque os desenvolvedores não podem mais aproveitar todo o potencial da nuvem se todo o seu universo for um único contêiner.
Outra opção é usar uma plataforma como Vercel ou Render ou Heroku — que oferece uma ótima experiência de entrega de código para a nuvem. O problema é que você inevitavelmente chega ao limite deste lindo penhasco e tem que pular de volta para a selva.
Essas plataformas integradas verticalmente são capazes de otimizar sua experiência em torno de um tipo específico de aplicativo (como aplicativos front-end ou cargas de trabalho em contêineres) e, eventualmente, os sistemas crescem a partir dessas soluções verticais. E como qualquer pessoa que já tentou migrar de uma dessas plataformas sabe… é um pesadelo.
Não podemos continuar usando a nuvem da mesma maneira
É muito difícil. Precisamos construir soluções melhores para desenvolvedores. A meu ver: precisamos transformar esta selva em um parque. O que isso significa é que precisamos de eliminar muitas das hostilidades, mantendo ao mesmo tempo a riqueza e a utilidade.
Para conseguir isso, temos que fornecer aos desenvolvedores melhores abstrações. Serei o primeiro a admitir que as abstrações têm seus próprios problemas. Uma das minhas citações favoritas de Joel Spolsky afirma que “todas as abstrações não triviais, até certo ponto, vazam” – e isso certamente soa verdadeiro. Mas isso não significa que a abstração não seja útil e valiosa.
Ao clicar em um botão com o mouse, você está usando camadas e mais camadas de abstrações — mas essas são abstrações muito sólidas. Às vezes, essas abstrações são interrompidas se você ficar sem CPU ou se houver um bug, mas na maioria das vezes essas abstrações são muito poderosas e tornam sua vida muito mais fácil do que seria realizar a mesma tarefa sem elas.
Outra coisa importante sobre as abstrações é que elas democratizam a tecnologia. O exemplo mais recente de que todos falam é o ChatGPT. Todos nós podemos ver que está vazando e tem alucinações. Mas ainda é incrivelmente poderoso. Originalmente, esse tipo de tecnologia só era acessível a especialistas em aprendizado de máquina. Hoje minha mãe pode aproveitar essa abstração e seu potencial.
Escolher entre Kubernetes e Serverless não é o futuro
Nenhum dos paradigmas dá aos desenvolvedores o que eles desejam. Os desenvolvedores do Kubernetes são “containerizados” e, portanto, muito limitados na quantidade de “nuvem” que podem aproveitar. Por outro lado, os desenvolvedores sem servidor têm muitas opções e acabam com muitas responsabilidades; eles essencialmente também precisam ser especialistas em DevOps para poder entregar.
Acho que precisamos respeitar o fato de que existem dois domínios separados de problemas de engenharia quando entregamos aplicativos para a nuvem. Temos o domínio do problema da plataforma, onde os engenheiros da plataforma estão operando, e depois temos o domínio do problema do negócio, onde os desenvolvedores estão focados. Para resolver isto, acredito que precisamos de um novo modelo de programação, que dissocie estes domínios de problemas e ofereça uma forma de cada disciplina aplicar as suas preocupações.
É aqui que Wingling entra.
Uma linguagem de programação unificada para controlar a complexidade da nuvem
Winglang é uma linguagem de programação de código aberto e uma biblioteca padrão que conecta a plataforma e o aplicativo em um modelo melhor. Ela parecerá familiar para os desenvolvedores porque é uma linguagem padrão orientada a objetos e há uma comunidade incrível começando a construir em torno do projeto.
Winglang adota uma abordagem com baterias incluídas, o que significa que o conjunto de ferramentas é enviado com tudo que um desenvolvedor precisa, como uma estrutura de teste, uma extensão IDE, um compilador e um simulador de nuvem. É um balcão único. Wing interopera naturalmente com qualquer módulo NPM e com código JavaScript e TypeScript; decidimos compilar o Winglang para JavaScript porque é o maior ecossistema do planeta e é muito popular no desenvolvimento em nuvem.
Camadas de abstração e linguagens de programação de alto nível têm sido fundamentais para democratizar o desenvolvimento de software desde os primórdios da computação.
A linguagem foi projetada desde o início para desenvolvedores que estão construindo sistemas distribuídos que aproveitam a infraestrutura em nuvem como cidadãos de primeira classe. O compilador Winglang produz um pacote pronto para implantação que inclui definições de infraestrutura como código para Terraform, CloudFormation ou outros mecanismos de provisionamento de nuvem, bem como código agrupado Node.js projetado para execução em plataformas de computação como AWS Lambda, Kubernetes ou plataformas de borda.
Por que Wing é uma linguagem e não outra biblioteca ou estrutura?
Os aplicativos em nuvem são fundamentalmente diferentes dos aplicativos executados em uma única máquina. São sistemas distribuídos que dependem de infraestrutura em nuvem para atingir seus objetivos. Para expressar a infraestrutura e a lógica do aplicativo em um modelo de programação unificado e com segurança de tipo, Winglang tem duas fases de execução: “preflight” para definições de infraestrutura e “inflight” para código de tempo de execução.
O código de simulação é executado durante a compilação e produz a configuração da infraestrutura do seu aplicativo (por exemplo, Terraform, CloudFormation). Você pode pensar no código de comprovação do Wing como uma linguagem de configuração de estado desejada (semelhante à linguagem de configuração HashiCorp usada no Terraform, no AWS CDK ou no Pulumi). O código Inflight é compilado em JavaScript e agrupado para que possa ser executado em plataformas de computação em nuvem, como funções sem servidor, contêineres ou até mesmo VMs em um tempo de execução Node.js.
Vejamos um exemplo simples:
Aqui, nuvem.Queue, nuvem.Contadore nuvem.Bucket disse comprovação objetos. Eles representam recursos de infraestrutura em nuvem. Quando compilado para um provedor de nuvem específico, como AWS, um arquivo Terraform será produzido com a implementação desses recursos pelo provedor (neste caso uma fila SQS, um bucket S3 e uma tabela DynamoDB com contador atômico). O fila.setConsumer() método é um método de comprovação que configura a infraestrutura para invocar uma função de trânsito específica para cada mensagem na fila.
Agora vem a parte legal: o código executado dentro da função inflight interage com o contador e os objetos bucket por meio de seus métodos inflight (contador.inc() e bucket.put()). Esses métodos só podem ser chamados em escopos em andamento.
Esta interação entre o voo e o pré-voo é chamada elevador. O compilador retira os objetos do espaço de comprovação para que o código em andamento possa interagir com eles após a implantação do sistema. Uma das coisas que mais entusiasmam os usuários com o levantamento é que o compilador Wing também pode informar quais operações são executadas no objeto, e essas informações são usadas pelo provedor da plataforma para conectar automaticamente coisas como políticas IAM de privilégio mínimo.
Às vezes, quando mostramos o Wing aos clientes, eles nos dizem que acham que acabaram de ver o futuro. Acho que eles viram o passado. Eles viram como poderíamos adotar uma abordagem que nos permitisse simplificar e abstrair a programação em “computadores tradicionais” e simplesmente aplicá-la a esse novo tipo de computador que chamamos de “nuvem”.
A postagem Se Dev e Ops tivessem um bebê – seria chamado de Winglang apareceu pela primeira vez em The New Stack.