27 pontos por GN⁺ 2024-12-07 | 12 comentários | Compartilhar no WhatsApp
  • Há dois principais padrões de uso de AI por desenvolvedores
    • Bootstrappers:
      • Usam ferramentas como Bolt, v0 e AIs de screenshot-to-code para gerar rapidamente protótipos iniciais.
      • Usam a AI a partir de um design ou conceito como ponto de partida para gerar a base inicial de código e desenvolver um protótipo funcional em algumas horas ou dias
    • Iterators:
      • Usam ferramentas como Cursor, Cline, Copilot e WindSurf no desenvolvimento diário para completar código, fazer refatorações complexas e gerar testes e documentação

Diferença no uso de AI entre desenvolvedores experientes e iniciantes

  • Desenvolvedores experientes: refatoram continuamente o código sugerido pela AI, tratam edge cases, fortalecem as definições de tipos e revisam decisões de arquitetura
  • Desenvolvedores iniciantes: tendem a aceitar a saída da AI como está, correndo o risco de produzir um código tipo “castelo de cartas”, que pode quebrar em ambiente real

O paradoxo das ferramentas de AI: o paradoxo do conhecimento

  • Desenvolvedores experientes: usam a AI para acelerar tarefas que já conhecem
  • Desenvolvedores iniciantes: tentam usar a AI para aprender o que devem fazer
  • Resultado: a eficácia do uso de AI varia muito de acordo com o nível de experiência

O problema dos 70% quando não especialistas usam ferramentas de programação com AI

  • Progresso inicial: com ferramentas de AI, é possível implementar rapidamente 70% da funcionalidade desejada
  • Os 30% restantes: ao tentar corrigir pequenos bugs, surgem novos problemas, e ao tentar resolvê-los pode começar um ciclo vicioso em que ainda mais problemas aparecem

Estratégias para usar ferramentas de AI de forma eficaz

  • Padrão de rascunho com AI: gerar uma implementação básica com AI e depois revisar e refatorar manualmente
  • Usar a AI como ferramenta de aprendizado: compreender o código gerado pela AI por meio de conversas contínuas, aprender junto conceitos básicos de programação e acumular conhecimento de forma gradual
  • Reconhecer os limites da AI: ferramentas de AI são úteis para desenvolvimento de protótipos, apoio ao aprendizado e validação de ideias, mas ainda é necessário conhecimento real de engenharia para desenvolver software sustentável e pronto para produção

A ascensão da engenharia de software agentic

  • Sistemas agentic: estão evoluindo para além de simplesmente responder a comandos, tornando-se sistemas capazes de planejar, executar e iterar
  • Perspectiva futura: a AI não está substituindo desenvolvedores; ela está avançando para se tornar uma colaboradora cada vez mais proativa, que respeita a orientação e a expertise humanas enquanto ajuda a resolver problemas com iniciativa
  • A AI já é útil para implementar padrões que você já conhece, prototipar ideias rapidamente e explorar diferentes abordagens
  • Ela automatiza tarefas repetitivas e rotineiras de programação, permitindo focar em problemas mais interessantes

Cuidados ao usar ferramentas de AI

  • Importância da experiência do usuário: com AI, é possível criar demos rapidamente, mas se não forem tratados com cuidado mensagens de erro, edge cases e estados de UI que podem surgir no uso real, isso pode gerar frustração para o usuário
  • O renascimento do capricho artesanal:
    • A AI acelerou o desenvolvimento de software, mas existe o risco de perder a arte de criar experiências com verdadeira qualidade para o consumidor.
    • Ferramentas de AI podem assumir tarefas rotineiras de programação e ajudar desenvolvedores a se concentrarem nos detalhes realmente importantes.

Conclusão

  • O papel da AI:
    • A AI não serve apenas para escrever mais código mais rápido, mas para ajudar a construir software melhor
    • A AI não melhora dramaticamente a qualidade do software.
  • As partes difíceis do desenvolvimento de software ainda exigem julgamento humano.
  • A AI permite explorar rapidamente soluções melhores, mas não pode substituir boas práticas de software.
  • Responsabilidade humana: ainda cabe aos humanos usar a AI com sabedoria, manter princípios de engenharia e melhorar a qualidade do software

12 comentários

 
dbs0829 2024-12-10

Usar tecnologia é bom, mas tem gente demais terceirizando até o pensamento; isso aparece ainda mais, especialmente em contextos de educação, e me preocupa. Sinceramente, eu não gostaria de trabalhar com pessoas assim.

 
kandk 2024-12-09

Talvez seja parecido com a discussão de que a IDE estraga os desenvolvedores..

 
savvykang 2024-12-07

Estou cansado de corrigir código de IA gerado pelo cliente
Quando a IA começa a fazer julgamentos, parece não haver saída

 
iolothebard 2024-12-07

Quando você dá feedback para a IA, parece que ela vai melhorando... até que, em algum momento, tudo desanda. É preciso ter o jeito de perceber esse momento. E, quando ele chegar, você precisa escolher entre abandonar a IA ou recomeçar.

 
yadameda 2024-12-07

Como vocês acham que production-ready (pronto para produção, no contexto do texto) ficaria mais natural em tradução?

em nível de prontidão para serviço real
em nível de produto

 
kandk 2024-12-09

Pronto para o lançamento!

 
binaryeast 2024-12-08

Eu costumo traduzir como pronto para lançamento ou preparado para lançamento.

 
jhj0517 2024-12-08

"Pronto para lançamento" parece bom!

 
bus710 2024-12-08

“pronto para implantação (em uso real ou para clientes)” algo assim, talvez?

 
savvykang 2024-12-07

E o que dizer do que foi validado na prática?

 
soomtong 2024-12-09

Na prática, parece que a expressão mais usada é battle tested.

 
GN⁺ 2024-12-07
Opiniões do Hacker News
  • A IA, assim como várias ferramentas do passado, tentou substituir partes da programação. Mas o trabalho essencial ainda exige o cérebro humano

    • A IA não consegue realizar trabalhos essenciais como o gerenciamento de complexidade
    • A IA consegue conversar em inglês e é mais flexível do que tentativas anteriores, mas ainda tem limites na resolução de problemas essenciais
  • A IA é como um desenvolvedor júnior entusiasmado da equipe

    • Tanto desenvolvedores júnior quanto ferramentas de IA tendem a produzir muitos bugs e código prolixo
    • Como a IA não consegue aprender com feedback, é preciso continuar revisando os mesmos erros repetitivos
  • Foi possível desenvolver novas ferramentas rapidamente usando ferramentas de IA

    • Graças à IA, tarefas que levariam dias puderam ser concluídas em poucas horas
    • Mesmo que a IA tenha feito 70% ou 42,5% do trabalho total, isso ainda foi uma grande melhora
  • Para desenvolvedores júnior, a IA é uma faca de dois gumes

    • Usar a IA como atalho para aprender faz com que o aprendizado seja pulado
    • Mas, ao usar a IA como mentora, é possível aprender com profundidade
    • Se a IA substituir o trabalho dos desenvolvedores júnior, isso pode gerar problemas de contratação
  • O padrão de "confiar, mas verificar" é importante

    • Se o código escrito pela IA compila e passa nos casos de teste, isso é um sinal positivo
    • Por exemplo, há um projeto que faz binding do csscolorparser do Rust para Python
  • A IA consegue escrever código rapidamente, mas isso não acelera o processo de aprendizado

    • Com a ajuda da IA, é possível evoluir mais rápido, mas ainda leva tempo para escrever código bem estruturado
  • O Copilot falha em tarefas complexas

    • A IA mostra limites de escalabilidade
    • No futuro, serão necessárias tecnologias como computação quântica
  • A GenAI pode entregar resultados profundos em soluções com requisitos bem conhecidos

    • Em problemas complexos, só consegue algo em torno de 50% de resultado
    • Está sendo usado um método de criar uma lista detalhada de tarefas e resolver cada uma individualmente
  • É importante validar o trabalho da IA

    • O código sugerido pela IA era executável, mas estava usando uma biblioteca com problemas de segurança
    • Mesmo que o código da IA funcione, ele precisa ser validado
  • É difícil encontrar, na prática, pessoas que realmente tenham tido um grande ganho de produtividade com IA

    • Ferramentas de IA são convenientes, mas só são úteis para algumas partes da programação