- Em 2019, era difícil para a maioria dos engenheiros de software imaginar como o machine learning poderia ajudar em seu trabalho
- Porém, em 2024, há um entusiasmo generalizado sobre como a IA ajuda a escrever código
- Muitos engenheiros já experimentaram autocompletar baseado em ML em ferramentas internas da empresa ou em produtos comerciais
- Este texto apresenta as melhorias mais recentes baseadas em IA em meio à transformação contínua das ferramentas internas de desenvolvimento de software do Google
- Também discute mudanças adicionais esperadas para os próximos 5 anos
- Também apresenta uma metodologia para construir produtos de IA que entreguem valor ao desenvolvimento profissional de software
- Essa equipe é responsável pelos ambientes de desenvolvimento de software em que os engenheiros do Google passam a maior parte do tempo, como IDE, revisão de código e busca de código
- Isso mostra que essas melhorias podem impactar diretamente a produtividade e a satisfação dos desenvolvedores
Desafios
- Como a tecnologia de IA evolui rapidamente, um desafio constante nessa área é prever quais ideias vale explorar primeiro
- Muitas vezes existe uma lacuna considerável entre um demo tecnicamente viável e um produto bem-sucedido em produção
- Há três diretrizes para a abordagem de levar ideias até a implantação em produto:
- Priorizar de acordo com a viabilidade técnica e o impacto: trabalhar em ideias cuja viabilidade técnica já tenha sido comprovada e que se espere terem alto impacto (mensurável) no fluxo de trabalho dos engenheiros
- Aprender rapidamente para melhorar UX e qualidade do modelo: focar em iterar rapidamente e extrair aprendizados, preservando a produtividade e a satisfação dos desenvolvedores. A experiência do usuário é tão importante quanto a qualidade do modelo
- Medir o efeito: como o objetivo é aumentar métricas de produtividade e satisfação, é preciso monitorá-las amplamente
Aplicando LLMs ao desenvolvimento de software
- Com o surgimento da arquitetura Transformer, começou-se a explorar como aplicar LLMs ao desenvolvimento de software
- A conclusão inline de código baseada em LLM é a aplicação de IA ao desenvolvimento de software mais popular
- Usar o próprio código como dado de treinamento é uma aplicação natural da tecnologia de LLM
- A UX parece natural para os desenvolvedores, porque o autocompletar em nível de palavra já é há muito tempo uma função central das IDEs
- É possível fazer uma medição aproximada de impacto, como a proporção de novos caracteres escritos por IA
- Por esses motivos, faz sentido que essa aplicação dos LLMs tenha sido uma das primeiras a ser implantada
- Um blog anterior explicou como melhorar a experiência do usuário com conclusão de código e como medir seu impacto
- Desde então, ela apresentou crescimento rápido e contínuo, semelhante ao observado em outros ambientes corporativos
- A taxa de adoção entre engenheiros de software é de 37%, e ela ajuda a completar 50% dos caracteres de código
- As principais melhorias vieram tanto do modelo quanto da UX
- Esse ciclo é essencial para aprender com comportamento real, e não com fórmulas sintéticas
- Recursos baseados em IA em ferramentas de programação, como IDEs, são aprimorados usando dados de log de vários tipos de ferramentas e dados de uso que capturam preferências e necessidades dos usuários
- A proporção de código gerado com ajuda de IA continua aumentando
- Ela é definida como o número de caracteres aceitos de sugestões baseadas em IA dividido pela soma entre os caracteres digitados manualmente e os caracteres aceitos de sugestões baseadas em IA
- Vale observar que caracteres vindos de copiar e colar não entram no denominador
- São usados logs vastos e de alta qualidade sobre atividades internas de engenharia de software, cuidadosamente curados ao longo do tempo a partir de várias ferramentas
- Esses dados permitem representar edições detalhadas de código, resultados de build, edições para resolver problemas de build, operações de copiar e colar código, modificações no código colado, revisão de código, edições para resolver apontamentos dos revisores e envio de mudanças para o repositório
- Os dados de treinamento consistem em um corpus de código alinhado, com anotações por tarefa tanto na entrada quanto na saída
- A próxima implantação importante foi a resolução de comentários de code review (atualmente mais de 8% são tratados com apoio baseado em IA) e a adaptação automática de código colado ao contexto ao redor (atualmente cerca de 2% do código na IDE)
- Implantações adicionais incluem instruir a IDE em linguagem natural para editar código e prever correções para falhas de build
- Outras aplicações também são possíveis, como prever dicas de legibilidade de código que sigam padrões semelhantes
- Em conjunto, essas aplicações implantadas foram bem-sucedidas e amplamente usadas no Google, com impacto mensurável na produtividade em um ambiente industrial real
Lições aprendidas
- O trabalho até agora trouxe alguns aprendizados:
- O maior impacto é alcançado com uma UX que se integra naturalmente ao fluxo de trabalho do usuário. Em todos os exemplos acima, sugestões são apresentadas ao usuário, permitindo avançar para a próxima etapa do fluxo com um único toque ou clique. Experimentos que exigiam que o usuário se lembrasse de acionar o recurso não conseguiram escalar
- Foi observado que, com sugestões baseadas em IA, quem escreve código está se tornando cada vez mais revisor. É importante encontrar um equilíbrio entre o custo da revisão e o valor agregado. Em geral, isso é tratado por meio de metas de taxa de aceitação
- Como métricas offline muitas vezes são apenas substitutos aproximados do valor para o usuário, iterações rápidas por meio de experimentos A/B online são fundamentais. Há uma grande vantagem em expor recursos baseados em IA em ferramentas internas, porque isso permite lançar e iterar com facilidade, medir dados de uso e perguntar diretamente aos usuários sobre sua experiência por meio de pesquisa de UX
- Dados de alta qualidade obtidos a partir das atividades dos engenheiros do Google em todo o conjunto de ferramentas de software, incluindo interações com esses recursos, são essenciais para a qualidade do modelo
- Aproveitar melhorias de UX e de modelo para remover gargalos intermediários, ao mesmo tempo em que se otimiza a conversão entre oportunidade (principalmente atividade do usuário, mostrada no topo do funil abaixo) e impacto (assistência de IA aplicada, na parte inferior do funil), é algo importante
What's Next
- Motivados pelo sucesso até aqui, o foco está em combinar os modelos de base mais recentes (série Gemini) com dados de desenvolvedores (parte do DIDACT mencionado acima) para impulsionar aplicações existentes e novas de ML na engenharia de software do Google
- Em toda a indústria, a conclusão de código baseada em ML já ofereceu grande ajuda aos desenvolvedores de software
- Ainda existem oportunidades para melhorar a geração de código, mas espera-se que os próximos benefícios venham do suporte de ML a atividades mais amplas de engenharia de software, como testes, compreensão de código e manutenção de código
- Este último ponto é especialmente relevante em ambientes corporativos
- Essas oportunidades orientam o trabalho em andamento do próprio Google
- O texto destaca duas tendências visíveis na indústria:
- A interação humano-computador está migrando, de forma geral, para a linguagem natural, avançando na direção de usar a linguagem como interface para tarefas de engenharia de software e como porta de entrada para as necessidades de informação dos desenvolvedores, integrada à IDE
- A automação baseada em ML de tarefas em larga escala, do diagnóstico de problemas até a aplicação de correções, começou a mostrar evidências iniciais de viabilidade
- Essas possibilidades são impulsionadas por inovações em agentes e uso de ferramentas, que permitem construir sistemas que usam um ou mais LLMs como componentes para executar tarefas maiores
- Para ampliar o sucesso acima rumo a esses recursos de próxima geração, a comunidade de profissionais e pesquisadores que estuda esse tema pode se beneficiar de benchmarks comuns que ajudem a direcionar a área para tarefas práticas de engenharia
- Até agora, os benchmarks têm sido focados principalmente em geração de código (por exemplo, HumanEval)
- Porém, em ambientes corporativos, benchmarks para tarefas mais amplas, como migração de código e depuração em produção, podem ser especialmente valiosos
- Já foram publicados benchmarks para correção de bugs (por exemplo, SWEBench) e protótipos voltados para esses benchmarks (por exemplo, Cognition AI)
- Incentiva-se que a comunidade se una para propor mais benchmarks que cubram tarefas de engenharia de software mais amplas
Opinião do GN⁺
- Evolução rápida da IA: como a tecnologia de IA avança rapidamente, é importante continuar aprendendo e aplicando as técnicas mais recentes.
- UX e qualidade do modelo: a experiência do usuário e a qualidade do modelo são fatores cruciais para o sucesso de ferramentas de IA.
- Importância dos dados: dados de alta qualidade influenciam fortemente o desempenho dos modelos de IA.
- Possibilidades futuras: a IA pode vir a desempenhar um papel ainda maior em vários aspectos da engenharia de software.
- Tendências da indústria: interfaces em linguagem natural e automação de tarefas em larga escala devem liderar o futuro do desenvolvimento de software.
1 comentários
Comentários do Hacker News
Quando a IA é usada corretamente, ela cumpre dois papéis: 1) economiza o tempo do desenvolvedor e reduz a carga cognitiva com correções sem controvérsia. 2) torna o usuário mais inteligente e mais informado por meio de sugestões. Por exemplo, há momentos em que o recurso de autocomplete de código funciona bem.
Há uma afirmação interessante de que as ferramentas de IA “falham em escalar” quando o usuário precisa acionar a funcionalidade. Estou pensando em como a IA dentro da IDE pode ser útil ao sugerir ideias em nível de design e conceituais.
Está sendo observado um fenômeno em que, por causa das sugestões baseadas em IA, quem escreve código está se tornando cada vez mais um revisor. É importante encontrar um equilíbrio entre o custo da revisão e o valor adicional.
Achei útil usar o GPT-4 para gerar UIs em React e Python em poucos minutos e revisar o código para entender como ele funciona.
Por causa da RAM limitada dos humanos, é preciso colocar ideias em um meio externo. As sugestões da IA ajudam a avançar mais rápido nas etapas iniciais.
É inegável que LLMs (grandes modelos de linguagem) são úteis para programação. O principal desafio é a UX correta para tornar isso mais fluido. Já experimentei autocomplete, mas desativei porque a maioria das sugestões não era boa.
Achei mais útil usar o app desktop do ChatGPT para fazer perguntas sobre código. No entanto, é incômodo ter que explicar os detalhes todas as vezes.
É interessante a tendência de a proporção de código escrito com apoio de IA aumentar para até 50%.
A IA diz como fazer a tarefa solicitada, mas não diz que aquilo é uma má ideia. A qualidade do código gerado por ML depende dos dados de treinamento.
Fico pensando quanto tempo vai levar para a IA substituir completamente os engenheiros de software do Google.
O objetivo final da IA é operar sistemas, depurar apps, gerenciar data stores e escrever o código dos apps com base no feedback dos usuários e na descrição dos requisitos.
É bom experimentar ferramentas de IA, mas o fato de outras pessoas copiarem cegamente pode ter efeitos negativos. É difícil encontrar o principal argumento de venda da escrita de código com LLM.