11 pontos por GN⁺ 2024-06-10 | 1 comentários | Compartilhar no WhatsApp
  • 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:
    1. 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
    2. 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
    3. 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:
    1. 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
    2. 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
    3. 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
    4. 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:
    1. 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
    2. 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

 
GN⁺ 2024-06-10
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.