43 pontos por GN⁺ 2025-02-19 | 6 comentários | Compartilhar no WhatsApp
  • tldr: faço um brainstorming da especificação, monto um plano e depois executo com LLM codegen. Um loop iterativo por vez. Aí a mágica acontece
  • Estou usando LLMs para criar rapidamente vários produtos pequenos. É divertido e útil
  • Mas, se você cair numa abordagem errada, pode desperdiçar muito tempo
  • Muitos desenvolvedores estão adotando abordagens parecidas entre si, e abaixo está o meu workflow

    "Está funcionando bem agora, mas em 2 semanas pode não funcionar mais ou funcionar duas vezes melhor"

  • Existem 2 formas de desenvolver
    • Código greenfield: começar um projeto novo
    • Código legado modernizado: melhorar ou expandir uma base de código existente

Greenfield: começar do zero

  • É um processo que funciona bem para situações de “começar do zero”
  • O fluxo é fazer brainstorming da ideia, documentá-la, montar um plano pequeno em etapas e depois usar ferramentas de geração de código para implementar
  • Passo 1: concretizar a ideia
    • Explico a ideia para um LLM como o ChatGPT e vou refinando até chegar a uma especificação concreta, fazendo com que ele conduza perguntas uma a uma
    • No final, crio uma especificação detalhada (spec.md) e organizo isso em um formato de documento que pode ser entregue a um desenvolvedor
    • Se necessário, também posso usar uma ferramenta como Deep Research para obter materiais de apoio sobre a ideia
  • Passo 2: planejamento
    • Com base na especificação, peço a um modelo mais forte em “entendimento e raciocínio” para gerar um blueprint detalhado passo a passo
    • Seja com TDD ou não, divido em pequenas unidades de trabalho por etapa e organizo na ordem certa
    • Com esse processo, gero prompt_plan.md e todo.md
      • prompt_plan.md contém o desenho dos prompts necessários para a geração de código, e todo.md inclui uma checklist
    • Esse planejamento costuma levar uns 15 minutos e também é fácil de consultar depois
  • Passo 3: execução
    • Uso várias ferramentas de geração de código e apoio, como Aider, Cursor e Claude, para escrever o código de fato
    • Claude e Aider são exemplos representativos
    • Abordagem com Claude
      • Primeiro configuro a estrutura do projeto (boilerplate etc.) e depois envio ao Claude os prompts de cada etapa
      • Copio e colo o código gerado no IDE e executo os testes
      • Se surgir algum problema, envio a base de código atual ao Claude com uma ferramenta como repomix para depuração
      • Workflow
        • Configurar o repo (boilerplate, uv init, cargo init, etc.)
        • Colar o prompt no Claude
        • Fazer copy & paste do claude.ai para o IDE
        • Executar o código, rodar os testes etc.
        • Se funcionar, seguir para o próximo prompt
        • Se não funcionar, usar o Repomix para enviar a base de código ao Claude e depurar
        • Repetir esse processo (rinse repeat)
    • Abordagem com Aider
      • No Aider, também trabalho inserindo prompt_plan.md em sequência
      • Ele ajuda a rodar testes automaticamente ou a encontrar e corrigir erros
      • Quando necessário, resolvo o problema com depuração interativa
        • Configurar o repo (boilerplate, uv init, cargo init, etc.)
        • Executar o Aider
        • Colar o prompt no Aider
        • Assistir o Aider dançar ♪┏(・o・)┛♪
        • O Aider pode rodar os testes ou executar o app para validar
        • Se funcionar, seguir para o próximo prompt
        • Se não funcionar, corrigir em Q&A com o Aider
        • Repetir esse processo (rinse repeat)
  • Resultados
    • Dessa forma, dá para implementar em pouco tempo vários projetos, como scripts, apps em Expo e CLIs em Rust
    • Se você tem projetos grandes ou pequenos que vem adiando, recomendo tentar
    • A vantagem é poder experimentar rápido enquanto aprende novas linguagens ou tecnologias

Non-greenfield: trabalho incremental/iterativo sobre código existente

  • Este é o método que uso quando aplico repetidamente pequenas tarefas a uma base de código que já existe
  • Em vez de um grande plano geral, o fluxo é trocar pedidos específicos e resultados por unidade de trabalho
  • Garantir contexto
    • É possível usar uma ferramenta como repomix para resumir a base de código e repassá-la ao LLM
    • Gerencio configurações repetitivas com mise e salvo o resultado resumido em um arquivo chamado output.txt
    • Se a base de código for grande demais, ajusto para resumir apenas as partes necessárias
  • Exemplo de workflow
    • Uso um comando como mise run LLM:generate_missing_tests para fazer o LLM identificar as partes onde faltam testes
    • Depois aplico essas sugestões (issues) com Claude ou Aider e testo o resultado novamente
    • Assim vou melhorando gradualmente a base de código existente

Principais exemplos de prompt

  • Code review
    “Como um desenvolvedor sênior, faça uma revisão minuciosa deste código. Inclua números de linha e contexto. Não faça uma revisão superficial; analise profundamente”
    “You are a senior developer. Your job is to do a thorough code review of this code. You should write it up and output markdown. Include line numbers, and contextual info. Your code review will be passed to another teammate, so be thorough. Think deeply before writing the code review. Review every part, and don't hallucinate.“
  • GitHub Issue generation
    “Como um desenvolvedor sênior, revise este código e escreva os principais problemas no formato de issue do GitHub”
    “You are a senior developer. Your job is to review this code, and write out the top issues that you see with the code. It could be bugs, design choices, or code cleanliness issues. You should be specific, and be very good. Do Not Hallucinate. Think quietly to yourself, then act - write the issues. The issues will be given to a developer to executed on, so they should be in a format that is compatible with github issues“
  • Missing tests
    “Como um desenvolvedor sênior, revise este código e apresente de forma concreta quais testes estão faltando ou quais testes são necessários“
    “You are a senior developer. Your job is to review this code, and write out a list of missing test cases, and code tests that should exist. You should be specific, and be very good. Do Not Hallucinate. Think quietly to yourself, then act - write the issues. The issues will be given to a developer to executed on, so they should be in a format that is compatible with github issues“

Esqui ᨒ↟ 𖠰ᨒ↟ 𖠰

  • Quando você usa LLMs para escrever código em alta velocidade, chega um momento em que a complexidade e o contexto se embolam e tudo fica confuso
  • Nesses momentos, ajuda voltar aos documentos da etapa de planejamento (por exemplo, do processo greenfield) ou escrever os testes de forma mais sistemática
  • Como tudo anda muito rápido, também é importante parar um pouco, descansar e reorganizar as ideias

Estou muito sozinho (。•́︿•̀。)

  • A maioria dos workflows baseados em LLM hoje está otimizada para o “modo solo”
  • Quando você tenta programar em equipe, conflitos e problemas de merge ficam mais complicados
  • Espero que evolua um ambiente colaborativo “multiplayer” onde várias pessoas possam usar LLMs ao mesmo tempo

Tempo

  • A eficiência para escrever código com LLM aumentou muito, mas existe um “downtime” causado pela espera do processamento de tokens
  • Eu uso esse tempo para pensar em ideias de outros projetos, ouvir música ou conversar
  • Tenho vivido uma experiência em que minha produtividade pessoal ficou muito maior do que antes

Haterade ╭∩╮( •̀_•́ )╭∩╮

  • Muitos amigos têm uma atitude do tipo “LLM de merda, isso é totalmente inútil”, e eu não ligo tanto para esse ponto de vista
  • Claro, eu também não compartilho dessa posição, mas é verdade que um olhar desconfiado é necessário
  • Existem infinitos motivos para odiar IA, e o que mais me preocupa é o consumo de energia e o impacto ambiental
  • Mesmo assim… “o código precisa fluir”, né… ai ai
  • Se você quer saber mais, mas não necessariamente virar um programador ciborgue, minha recomendação é: “não mude de opinião à força; apenas leia Co-Intelligence: Living and Working with AI, de Ethan Mollick”
    • O livro explica bem os benefícios dos LLMs sem exageros no estilo anarco-capitalista tecno-utópico
    • Pessoalmente, me ajudou muito, e também consegui ter conversas bem mais profundas com amigos que leram o livro
    • Recomendo muito

6 comentários

 
devs5 2025-02-25

Parece que Co-Intelligence: Living and Working with AI, de Ethan Mollick,
está previsto para ser publicado em março com o título Cérebro Duplo

 
kipsong133 2025-02-25

Nossa, então existia algo chamado Repomix. Eu ficava copiando e colando toda vez... buá

 
chugue85 2025-02-21

Obrigado!

 
ahwjdekf 2025-02-21

Será que a llm também vai receber os xingamentos que outros desenvolvedores dão no meu lugar?

 
aer0700 2025-02-20

Eu ainda uso LLM mais ou menos como um Google avançado e um Stack Overflow simpático, mas acho que preciso pensar em formas de aproveitar melhor. Também é importante como eu construo as coisas, claro, mas parece importante pensar junto com a IA sobre por que elas funcionam. O LLM é útil quando vou procurar documentação técnica antiga ou padrões.

 
GN⁺ 2025-02-19
Opinião do Hacker News
  • LLM é uma ferramenta capaz de criar rapidamente protótipos de novos projetos. No entanto, ao fazer alterações em código existente ou em projetos maduros, tende a aumentar a complexidade ou adicionar frameworks desnecessários por falta de contexto. LLM não substitui a compreensão do código.

  • Na colaboração com LLMs, é importante construir contexto por meio de perguntas. Isso é mais eficaz do que tentar criar contexto diretamente.

  • Recentemente, tenho tentado fazer mob programming com LLMs. Um LLM cuida da implementação, enquanto outro faz críticas e sugere melhorias.

  • É desejável não adicionar frameworks opinativos ao projeto. Isso aumenta o tamanho do contexto que o modelo precisa reconhecer. Por exemplo, em vez de usar Plasmo, deixo o LLM configurar a extensão de navegador.

  • Gostaria de ouvir relatos de pessoas que começaram com o Cursor chat e evoluíram para um workflow melhor. Tenho curiosidade para saber se o tempo investido em planejamento valeu a pena, se as alucinações diminuíram e se, no geral, isso economizou tempo.

  • Este artigo explica como usar LLMs da forma correta. Muita gente não pratica o suficiente a comunicação eficaz com modelos de linguagem. O autor domina a comunicação com LLMs, e esse workflow maximiza a eficiência.

  • Para maximizar a eficiência em um workflow com LLMs, é preciso ter digitação rápida, bom senso e familiaridade com os pontos fortes e fracos de cada modelo.

  • Ferramentas de programação com LLM são divertidas, mas, para verificar se realmente ajudam, é preciso definir metas concretas e prazos. LLMs tendem a falhar nessas condições.

  • Muitos programadores iniciantes esquecem a parte de especificação e plano de execução da programação. Para usar LLMs com sucesso, é preciso fazê-los criar especificações e planos de execução.

  • Não entendo a expectativa em relação ao Claude. Em perguntas sobre Apache Spark, houve muitas alucinações. Quero entender por que o Claude seria melhor do que outros modelos.

  • Para desenvolvedores individuais, tudo bem, mas várias instâncias de LLM analisando a mesma base de código em equipe podem não ser econômicas e podem ser arriscadas. Gostaria de saber se existe algum produto que ofereça contexto centralizado para equipes.