41 pontos por GN⁺ 2025-01-06 | 3 comentários | Compartilhar no WhatsApp
  • "O experimento confuso que mudou minha forma de pensar sobre análise de código com IA"
  • Observei situações em que IAs existentes frequentemente falhavam ao analisar codebases em React
  • Percebi que a causa estava no método de analisar apenas linha por linha, como um desenvolvedor júnior lendo código pela primeira vez

A diferença entre a época do bootcamp e a mentalidade sênior

  • Na fase júnior, é comum ler os arquivos em sequência, linha por linha, e logo se perder
  • Desenvolvedores sêniores usam a seguinte abordagem ao revisar PRs grandes
    • Verificam primeiro os arquivos principais
    • Agrupam e entendem as mudanças por funcionalidade
    • Primeiro compreendem a arquitetura como um todo e só depois examinam os detalhes de implementação
  • Decidi aplicar essa abordagem à IA

O experimento

  • Tentei uma abordagem de agrupar arquivos por funcionalidade e fornecer primeiro à IA informações de contexto sobre cada grupo
  • No código de exemplo, defini a interface FileGroup e processei os arquivos agrupando-os de acordo com a funcionalidade relacionada e o tamanho dos arquivos
  • Montei prompts para orientar a IA em nível de grupo sobre “que área funcional é essa e no que ela deve prestar mais atenção”

O momento da mudança surpreendente

  • Antes, a IA respondia de forma simples, como “inclui lógica de autenticação com token JWT”
  • Depois, passou a oferecer insights de nível sênior, como “impactos em conexões WebSocket e possível condição de corrida em PRs mesclados recentemente”
  • A IA começou a apontar questões considerando o contexto do sistema como um todo

O que realmente mudou

  • O ponto principal não foi usar um modelo de machine learning mais complexo, mas dar à IA a ordem de raciocínio de um desenvolvedor sênior
    1. Contexto primeiro: começar entendendo o sistema inteiro
    2. Correspondência de padrões: agrupar arquivos semelhantes para encontrar lógica repetida
    3. Análise de impacto: reconhecer o efeito das mudanças sobre o sistema inteiro
    4. Entendimento do histórico: rastrear até os motivos e o contexto de mudanças anteriores no código

Efeitos colaterais inesperados

  • Em vez de apenas corrigir os pontos desejados, a IA também passou a captar insights como
    • Identificação de blocos de código duplicados por copiar e colar
    • Alertas sobre padrões inconsistentes de tratamento de erros
    • Detecção de possíveis gargalos de desempenho
    • Sugestões de melhorias de arquitetura com base em padrões de uso

Por que isso importa

  • IDEs baseadas em IA recentes estão focadas em gerar código automaticamente
  • Mas fazer apenas sugestões sem o contexto do sistema inteiro pode ser tão arriscado quanto agir como “um desenvolvedor júnior que acabou de entrar no time”
  • O que realmente importa é a “compreensão profunda do código”

Perguntas que ainda restam

  • O problema de decidir quando atualizar e quando manter o contexto (informações históricas)
  • Como reagir quando forem encontrados padrões conflitantes
  • Como mostrar ao usuário resultados de análise com alto grau de incerteza

Direção futura

  • Estou pensando se também será possível ensinar à IA sensibilidades como as de um desenvolvedor sênior, por exemplo
    • A capacidade de detectar dívida técnica com antecedência
    • A habilidade de propor melhorias arquiteturais de forma proativa
    • A capacidade de detectar problemas de segurança a partir de padrões de uso
    • A sensibilidade para perceber regras informais dentro da equipe
  • O objetivo final não é simplesmente gerar “mais código”, mas ensinar “como entender profundamente todo o código como um desenvolvedor sênior”

3 comentários

 
savvykang 2025-01-06

As perguntas úteis para analisar e melhorar uma base de código não já são meio padronizadas? Parece que o autor está bastante empolgado.

 
yangeok 2025-01-06

Parece estar no mesmo contexto de usar o cursor para explicar a visão geral do projeto no notepad.

 
GN⁺ 2025-01-06
Opiniões no Hacker News
  • As pessoas estão críticas nos comentários. O texto aborda um resultado curto e positivo sobre a possibilidade de uma nova ferramenta, incluindo reflexões honestas e razoáveis

    • A narrativa de "Senior vs Junior Developer" pode ter sido um pouco exagerada, mas a essência do texto é excelente
    • Fico me perguntando se as pessoas estão com raiva por se sentirem ameaçadas
  • Este é mais um exemplo de LLM fazendo coisas impressionantes. No entanto, construir um sistema que funcione de forma consistente e precisa para todas as entradas é muito difícil

    • Há um exemplo de análise de arquivos de sistema de autenticação
    • Essa string hardcoded desempenha um papel importante, mas não é nada especial até ser gerada com precisão e consistência para todos os PRs
    • É preciso configurar uma avaliação com diferentes codebases e PRs reais
  • Deve haver lições aqui para sistemas de agentes melhores na escrita de código

    • Eles instruem Claude/chatGPT etc. a não gerar código. Fazem com que o código seja escrito depois de gerar a estrutura inicial
  • Li a primeira linha do texto e me senti um alienígena. Eu teria que ler o texto inteiro, mas ler o código existente de forma sequencial parece estranho

    • Há muita percepção equivocada sobre o que é um "desenvolvedor júnior"
  • Isso enfatiza a importância do fator humano. Sem compreensão contextual da codebase, não dá para saber o significado dos alertas da IA

    • É difícil entender o que é um "padrão compartilhado" e por que ele causaria uma race condition
    • A relação entre uma mudança de autenticação e um PR de "lógica de retry" não está clara
  • É difícil impedir que a IA invente APIs que não existem. Quando funciona bem, é ótimo, mas na maior parte do tempo não funciona

    • A IA funciona bem quando muitas pessoas já estão escrevendo código que outras já escreveram
  • Contexto e compreensão do código são importantes para melhorar a qualidade do código gerado por LLMs

    • O produto da Bismuth divide o projeto em áreas lógicas de acordo com a solicitação do usuário e navega pela codebase buscando informações de símbolos
    • Apenas alguns produtos concorrentes oferecem esse nível de busca
  • Como na reclamação de John McCarthy, isto é uma história, não um experimento ou uma prova

    • Espero que a comunidade use pensamento crítico e rigor
  • O resultado é impressionante. Há críticas sobre estilo e uniformidade, mas o resultado parece útil

    • Pelo título, achei que seria sobre IA ignorando o trabalho dos outros e destacando apenas o próprio trabalho
  • Parece que uma parte importante dessa tecnologia ficou de fora do texto. Não há implementação de getFileContext() e shouldStartNewGroup()